Flattern - Schreiben von IOS-spezifischem Code
Der Zugriff auf iOS-spezifischen Code ähnelt dem auf der Android-Plattform, verwendet jedoch iOS-spezifische Sprachen - Objective-C oder Swift und iOS SDK. Ansonsten entspricht das Konzept dem der Android-Plattform.
Lassen Sie uns dieselbe Anwendung wie im vorherigen Kapitel auch für die iOS-Plattform schreiben.
Lassen Sie uns eine neue Anwendung in Android Studio (macOS) erstellen , flutter_browser_ios_app
Befolgen Sie die Schritte 2 bis 6 wie im vorherigen Kapitel.
Starten Sie XCode und klicken Sie auf File → Open
Wählen Sie das xcode-Projekt im ios-Verzeichnis unseres Flatterprojekts.
Öffnen Sie AppDelegate.m unter Runner → Runner path. Es enthält den folgenden Code -
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// [GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
Wir haben eine Methode hinzugefügt, openBrowser, um den Browser mit der angegebenen URL zu öffnen. Es akzeptiert ein einzelnes Argument, url.
- (void)openBrowser:(NSString *)urlString {
NSURL *url = [NSURL URLWithString:urlString];
UIApplication *application = [UIApplication sharedApplication];
[application openURL:url];
}
Suchen Sie in der didFinishLaunchingWithOptions-Methode den Controller und legen Sie ihn in der Controller-Variablen fest.
FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
Legen Sie in der didFinishLaunchingWithOptions-Methode den Browserkanal als flutterapp.tutorialspoint.com/browse - fest.
FlutterMethodChannel* browserChannel = [
FlutterMethodChannel methodChannelWithName:
@"flutterapp.tutorialspoint.com/browser" binaryMessenger:controller];
Erstellen Sie eine Variable, schwacheSelf und setzen Sie die aktuelle Klasse -
__weak typeof(self) weakSelf = self;
Implementieren Sie jetzt setMethodCallHandler. Rufen Sie openBrowser auf, indem Sie call.method abgleichen. Rufen Sie die URL ab, indem Sie call.arguments aufrufen, und übergeben Sie sie, während Sie openBrowser aufrufen.
[browserChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
if ([@"openBrowser" isEqualToString:call.method]) {
NSString *url = call.arguments[@"url"];
[weakSelf openBrowser:url];
} else { result(FlutterMethodNotImplemented); }
}];
Der vollständige Code lautet wie folgt:
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// custom code starts
FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
FlutterMethodChannel* browserChannel = [
FlutterMethodChannel methodChannelWithName:
@"flutterapp.tutorialspoint.com /browser" binaryMessenger:controller];
__weak typeof(self) weakSelf = self;
[browserChannel setMethodCallHandler:^(
FlutterMethodCall* call, FlutterResult result) {
if ([@"openBrowser" isEqualToString:call.method]) {
NSString *url = call.arguments[@"url"];
[weakSelf openBrowser:url];
} else { result(FlutterMethodNotImplemented); }
}];
// custom code ends
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
- (void)openBrowser:(NSString *)urlString {
NSURL *url = [NSURL URLWithString:urlString];
UIApplication *application = [UIApplication sharedApplication];
[application openURL:url];
}
@end
Öffnen Sie die Projekteinstellung.
Gehe zu Capabilities und aktivieren Background Modes.
Hinzufügen *Background fetch und Remote Notification**.
Führen Sie nun die Anwendung aus. Es funktioniert ähnlich wie die Android-Version, aber der Safari-Browser wird anstelle von Chrome geöffnet.