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.