Flutter 与原生交互之BasicMessageChannel

该方式可以实现双向通道, 感觉适用于Android或ios的数据需要实时刷新在ui上,碎片连续性的消息传递。

直接上效果图

 

 

直接上代码 首先是Flutter端  分为2步 

1.发送消息,获取回调

首先获取 BasicMessageChannel 的对象,注册消息通道,原生端也要注册,字符串必须跟原生一致

 static const messageChannel = const BasicMessageChannel(
      'com.demo.test.messageChannel', StandardMessageCodec());

然后Flutter发送消息到原生,并接收原生函数的回调。

Map<String, String> map = {
     "text": "BasicMessageChannel 发送了一条消息给原生",
};
String message = await MethodChannelManage.messageChannel.send(map);

2.监听原生端主动发送的消息

注册监听

MethodChannelManage.messageChannel.setMessageHandler((message){
      // 这个message就是原生发送的消息
    });

接下来是Android端的代码


  public static String BASIC_MESSAGE_CHANNEL = "com.demo.test.messageChannel";

  static BasicMessageChannel basicMessageChannel;

  public static void registerWith(PluginRegistry.Registrar registrar) {
        basicMessageChannel = new BasicMessageChannel<>(registrar.messenger(), BASIC_MESSAGE_CHANNEL, StandardMessageCodec.INSTANCE);
        //setMethodCallHandler在此通道上接收方法调用的回调
        basicMessageChannel.setMessageHandler(new BasicMessageChannel.MessageHandler() {
            @Override
            public void onMessage(Object message, BasicMessageChannel.Reply reply){
                Map<String, String> arguments = (Map<String, String>) message;
                String str = arguments.get("text");
                reply.reply("Android接收到Flutter返回的消息:" + str + "  单次函数回调");
                androidToFlutter();
            }
        });
    }

 private static void androidToFlutter() {
    basicMessageChannel.send("Android主动发送消息,Flutter监听。消息 " + duration);
 }

然后是ios端的代码

-(void) BasicMessageChannelFunction{
    //获取当前的 controller
    FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
    messageChannel = [FlutterBasicMessageChannel messageChannelWithName:@"com.demo.test.messageChannel" binaryMessenger:controller];
    
    // 接收消息监听
    [messageChannel setMessageHandler:^(id message, FlutterReply callback) {
        
        NSString *method=message[@"text"];
        
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];

        callback(@"IOS接收到Flutter返回的消息: 单次函数回调");
        
        [messageChannel sendMessage:@"IOS主动发送消息,Flutter监听"];
    }];
    
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值