内容简介:flutter与Native交互是必不可少的,今天梳理一下,flutter监听native消息大致流程代码梳理
flutter与Native交互是必不可少的,今天梳理一下,flutter监听native消息
大致流程
- flutter注册EventChannel
- flutter EventChannel监听native消息
- native通过EventChannel发送消息
代码梳理
1 flutter Event监听
const EventChannel("App/Event/Channel", const StandardMethodCodec()); //开始监听 @override void initState() { // TODO: implement initState super.initState(); _eventChannel .receiveBroadcastStream("init") .listen(_onEvent, onError: _onError); } // 数据接收 void _onEvent(Object value) { print(value); } // 错误处理 void _onError(dynamic) {} 复制代码
说明:对于receiveBroadcastStream建议添加名称作为native中传递数据的参数使用 2 native 通过Event广播数据 2.1 初始化
FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:@"App/Event/Channel" binaryMessenger:flutterViewController]; [eventChannel setStreamHandler:self]; 复制代码
2.2 数据代理 FlutterStreamHandler
- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)events {}//此处的arguments可以转化为刚才receiveBroadcastStream("init")的名称,这样我们就可以一个event来监听多个方法实例 - (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments {} 复制代码
传递数据实例:
#pragma mark - <FlutterStreamHandler> // // 这个onListen是Flutter端开始监听这个channel时的回调,第二个参数 EventSink是用来传数据的载体。 - (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)events { // arguments flutter给native的参数 // 回调给flutter, 建议使用实例指向,因为该block可以使用多次 if (events) { NSMutableDictionary * params = [NSMutableDictionary dictionaryWithCapacity:0]; [params setValue:mReferNo forKey:@"ataNo"]; [params setValue:mDocType forKey:@"docType"]; [params setValue:self.aircraftNo forKey:@"aircraftNo"]; // [params setValue:[[NetworkingTools networkHeaders] modelToJSONString] forKey:@"headers"]; // [params setValue:[NetworkingTools networkHeaders] forKey:@"headers"]; [params setValue:@"我是标题" forKey:@"title"]; [params addEntriesFromDictionary:[NetworkingTools networkHeaders] ]; events([params modelToJSONString]); } return nil; } /// flutter不再接收 - (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments { // arguments flutter给native的参数 return nil; } 复制代码
最后是native端调用
FlutterViewController * flutterViewController = [[FlutterViewController alloc] init]; [flutterViewController setInitialRoute:@"App"]; flutterViewController.view.backgroundColor = [UIColor whiteColor]; FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:@"App/Event/Channel" binaryMessenger:flutterViewController]; [eventChannel setStreamHandler:self]; 复制代码
通过以上梳理我们基本就可以进行native反向主动给flutter发送数据
问题踩坑
native发送数据是NSDictionry不要进行内部嵌套:@{@"key":@{}}这样是不通过的
channel命名建议
- Android采用 packagename + eventType + channelname
- iOS 采用 bundleidentifier + event type + channelname
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 网络通信2:TCP简单通信
- 网络通信3:TCP交互通信
- 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序
- Electron 使用串口通信
- 进程间通信---共享内存
- 微服务通信策略
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。