Flutter - Scrittura di codice specifico IOS

L'accesso al codice specifico di iOS è simile a quello sulla piattaforma Android, tranne per il fatto che utilizza linguaggi specifici per iOS: Objective-C o Swift e iOS SDK. In caso contrario, il concetto è lo stesso di quello della piattaforma Android.

Scriviamo anche per la piattaforma iOS la stessa applicazione del capitolo precedente.

  • Creiamo una nuova applicazione in Android Studio (macOS), flutter_browser_ios_app

  • Seguire i passaggi 2 - 6 come nel capitolo precedente.

  • Avvia XCode e fai clic File → Open

  • Scegli il progetto xcode nella directory ios del nostro progetto flutter.

  • Apri AppDelegate.m sotto Runner → Runner path. Contiene il seguente codice:

#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
  • Abbiamo aggiunto un metodo, openBrowser per aprire il browser con l'URL specificato. Accetta un singolo argomento, url.

- (void)openBrowser:(NSString *)urlString { 
   NSURL *url = [NSURL URLWithString:urlString]; 
   UIApplication *application = [UIApplication sharedApplication]; 
   [application openURL:url]; 
}
  • Nel metodo didFinishLaunchingWithOptions, trova il controller e impostalo nella variabile controller.

FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
  • Nel metodo didFinishLaunchingWithOptions, imposta il canale del browser come flutterapp.tutorialspoint.com/browse -

FlutterMethodChannel* browserChannel = [
   FlutterMethodChannel methodChannelWithName:
   @"flutterapp.tutorialspoint.com/browser" binaryMessenger:controller];
  • Crea una variabile, weakSelf e imposta la classe corrente -

__weak typeof(self) weakSelf = self;
  • Ora implementa setMethodCallHandler. Chiama openBrowser facendo corrispondere call.method. Ottieni l'URL invocando call.arguments e passalo durante la chiamata a openBrowser.

[browserChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
   if ([@"openBrowser" isEqualToString:call.method]) { 
      NSString *url = call.arguments[@"url"];   
      [weakSelf openBrowser:url]; 
   } else { result(FlutterMethodNotImplemented); } 
}];
  • Il codice completo è il seguente:

#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
  • Apri impostazione progetto.

  • Vai a Capabilities e abilita Background Modes.

  • Inserisci *Background fetch e Remote Notification**.

  • Ora esegui l'applicazione. Funziona in modo simile alla versione Android ma verrà aperto il browser Safari invece di Chrome.