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.