Flutter - 编写IOS代码

Flutter - 编写IOS代码 首页 / Flutter入门教程 / Flutter - 编写IOS代码

访问iOS特定代码与Android平台上的代码相似,不同之处在于它使用iOS特定语言-Objective-C或Swift和iOS SDK。

下表显示了如何在Android和iOS平台上接收Dart值。

dartandroidios
nullnull无(嵌套时为NSNull)
booljava.lang.BooleanNSNumber numberWithBool:
intjava.lang.IntegerNSNumber numberWithInt:
doublejava.lang.DoubleNSNumber numberWithDouble:
Stringjava.lang.StringNSString:
Uint8Listbyte[]FlutterStandardTypedData typedDataWithBytes:
Int32Listint[]FlutterStandardTypedData typedDataWithInt32:
Int64Listlong[]FlutterStandardTypedData typedDataWithInt64:
Float64Listdouble[]FlutterStandardTypedData typedDataWithFloat64:
Listjava.util.ArrayListNSArray
Mapjava.util.HashMapNSDictionary

让无涯教程也为iOS平台编写与上一章相同的应用程序。

  • 让无涯教程在Android Studio(macOS)中创建一个新应用, flutter_browser_ios_app

  • 启动XCode并单击 File→Open

  • 在flutter项目的ios目录下选择xcode项目。

  • 在 Runner→Runner path 下打开AppDelegate.m。它包含以下代码-

#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
  • 无涯教程添加了openBrowser方法来打开具有指定URL的浏览器。它接受单个参数url。

- (void)openBrowser:(NSString *)urlString { 
   NSURL *url = [NSURL URLWithString:urlString]; 
   UIApplication *application = [UIApplication sharedApplication]; 
   [application openURL:url]; 
}
FlutterViewController* controller=(FlutterViewController*)self.window.rootViewController;
  • 在didFinishLaunchingWithOptions方法中,将浏览器通道设置为flutterapp.learnfk.com/browse-

FlutterMethodChannel* browserChannel = [
   FlutterMethodChannel methodChannelWithName:
   @"flutterapp.learnfk.com/browser" binaryMessenger:controller];
  • 创建一个变量weakSelf并设置当前类-

__weak typeof(self) weakSelf=self;
  • 现在,实现setMethodCallHandler,通过匹配call.method调用openBrowser,通过调用call.arguments获取URL,并在调用openBrowser时传递它。

    无涯教程网

[browserChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
   if ([@"openBrowser" isEqualToString:call.method]) { 
      NSString *url = call.arguments[@"url"];   
      [weakSelf openBrowser:url]; 
   } else { result(FlutterMethodNotImplemented); } 
}];
  • 完整的代码如下-

#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.learnfk.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); } 
   }]; 
   //自定义代码结束
   [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

运行应用程序。它的工作方式类似于Android版本,但将打开Safari浏览器,而不是chrome。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学微服务 -〔胡忠想〕

容器实战高手课 -〔李程远〕

etcd实战课 -〔唐聪〕

郭东白的架构课 -〔郭东白〕

自动化测试高手课 -〔柳胜〕

现代C++20实战高手课 -〔卢誉声〕

AI大模型之美 -〔徐文浩〕

云时代的JVM原理与实战 -〔康杨〕

AI大模型企业应用实战 -〔蔡超〕

好记忆不如烂笔头。留下您的足迹吧 :)