Flutter - Escrevendo código específico do IOS
O acesso ao código específico do iOS é semelhante ao da plataforma Android, exceto que usa linguagens específicas do iOS - Objective-C ou Swift e iOS SDK. Caso contrário, o conceito é o mesmo da plataforma Android.
Vamos escrever o mesmo aplicativo do capítulo anterior também para a plataforma iOS.
Vamos criar um novo aplicativo no Android Studio (macOS), flutter_browser_ios_app
Siga os passos 2 - 6 como no capítulo anterior.
Inicie o XCode e clique em File → Open
Escolha o projeto xcode no diretório ios do nosso projeto flutter.
Abra AppDelegate.m em Runner → Runner path. Ele contém o seguinte código -
#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
Adicionamos um método, openBrowser, para abrir o navegador com o url especificado. Ele aceita um único argumento, url.
- (void)openBrowser:(NSString *)urlString {
NSURL *url = [NSURL URLWithString:urlString];
UIApplication *application = [UIApplication sharedApplication];
[application openURL:url];
}
No método didFinishLaunchingWithOptions, encontre o controlador e defina-o na variável do controlador.
FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
No método didFinishLaunchingWithOptions, defina o canal do navegador como flutterapp.tutorialspoint.com/browse -
FlutterMethodChannel* browserChannel = [
FlutterMethodChannel methodChannelWithName:
@"flutterapp.tutorialspoint.com/browser" binaryMessenger:controller];
Crie uma variável, fracaSelf e defina a classe atual -
__weak typeof(self) weakSelf = self;
Agora, implemente setMethodCallHandler. Chame openBrowser combinando call.method. Obtenha o url invocando call.arguments e passe-o ao chamar openBrowser.
[browserChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
if ([@"openBrowser" isEqualToString:call.method]) {
NSString *url = call.arguments[@"url"];
[weakSelf openBrowser:url];
} else { result(FlutterMethodNotImplemented); }
}];
O código completo é o seguinte -
#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
Abra a configuração do projeto.
Vamos para Capabilities e habilitar Background Modes.
Adicionar *Background fetch e Remote Notification**.
Agora, execute o aplicativo. Funciona de forma semelhante à versão Android, mas o navegador Safari será aberto em vez do Chrome.