iOS 主动与native 通信

栏目: IOS · 发布时间: 7年前

内容简介:flutter与Native交互是必不可少的,今天梳理一下,flutter监听native消息大致流程代码梳理

flutter与Native交互是必不可少的,今天梳理一下,flutter监听native消息

大致流程

  1. flutter注册EventChannel
  2. flutter EventChannel监听native消息
  3. 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命名建议

  1. Android采用 packagename + eventType + channelname
  2. iOS 采用 bundleidentifier + event type + channelname

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Art of Computer Programming, Volume 4,  Fascicle 3

The Art of Computer Programming, Volume 4, Fascicle 3

Donald E. Knuth / Addison-Wesley Professional / 2005-08-05 / USD 19.99

Finally, after a wait of more than thirty-five years, the first part of Volume 4 is at last ready for publication. Check out the boxed set that brings together Volumes 1 - 4A in one elegant case, and ......一起来看看 《The Art of Computer Programming, Volume 4, Fascicle 3》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具