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平台编写与上一章相同的应用程序。

#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]; 
}
  • 在didFinishLaunchingWithOptions方法中,找到控制器并将其设置在控制器变量中。

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。

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

技术教程推荐

Java核心技术面试精讲 -〔杨晓峰〕

分布式技术原理与算法解析 -〔聂鹏程〕

说透中台 -〔王健〕

爱上跑步 -〔钱亮〕

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

人人都用得上的数字化思维课 -〔付晓岩〕

B端体验设计入门课 -〔林远宏(汤圆)〕

结构执行力 -〔李忠秋〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

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