Flutter如何添加与iOS通信-BasicMessageChannel

注我,一起成长,一起变强。

iOS与flutter通信有以下MethodChannel,BasicMessageChannel,EventChannel三种方式,此次介绍下BasicMessageChannel用法

1. 基本消息通道(BasicMessageChannel)

主要用于传递字符串或结构化消息(如 JSON,XML等)。

  • • 优点:适用于需要响应消息的场景,可以进行连续通信。

  • • 不足:不支持方法调用的模式,主要限于消息传递。

2.iOS端的BasicMessageChannel

初始化com.example.flutter_channel_basic_message_channel基本消息通道,并在iOS端调用sendMessage,传递了ksnowlv,10两个参数到flutter端;


 func setupBasicMessageChannel(_ flutterViewController: FlutterViewController) {
        let flutterMessageChannel = FlutterBasicMessageChannel(name:"com.example.flutter_channel_basic_message_channel",binaryMessenger:flutterViewController as!FlutterBinaryMessenger)
        
        let arguments:[String:Any] = [
            "name":"ksnowlv from iOS",
            "age":10
        ]
        
        //向Flutter端发送消息
        flutterMessageChannel.sendMessage(arguments) { (reply) in
            print("Received reply from Flutter:(String(describing: reply))")
            
        }
        
        // 监听Flutter发送到iOS端的消息
        flutterMessageChannel.setMessageHandler { [weak self] (message, reply)  in
            
            if let data = message as? Dictionary<String,Any>,
                let msg = data["message"as? String,
               let count = data["count"as? Int {
                
                DispatchQueue.main.async { [weak selfin
                    // 在主线程中更新UI
                    self?.flutterInfoLabel.text = "from flutter:message:(msg),count:(count)"
                }
                // 返回一个结果给Flutter
                reply("iOS Data received successfully")
                
                print("Received result from Flutter: (message)")
                
            }
        }
    }
    

3.flutter端的BasicMessageChannel

3.1。声明和iOS端相同的消息通道

  static const messageChannel = BasicMessageChannel<dynamic>(
  'com.example.flutter_channel_basic_message_channel',
  StandardMessageCodec(),
);

3.2.初始化基本消息通道,并监听消息

初始化基本消息通道的同时,监听iOS端的发送的消息,处理消息,并显示在flutter视图上;

  void initMessageChannel() {
  messageChannel.setMessageHandler((message) async {
    if (message != null && message is Map) {
      messageChannelName = message['name'];
      messageChannelAge = message['age'];

      setState(() {
        debugPrint("MessageChannel name: $messageChannelName, age: $messageChannelAge");
      });
    }
    // Return an optional reply back to iOS
    return "Data received by Flutter";
  });
}

3.3 flutter端向iOS端发送消息

  void _messageChannelSendMessageToiOS() async {
    try {
      final Map<Stringdynamic> arguments = {
        'message''BasicMessageChannel I am air from Flutter',
        'count': _counter
      };
      final String result = await messageChannel.send(arguments);

      debugPrint('BasicMessageChannel  send data to iOS: $result');
    } catch (e) {
      debugPrint(e.toString());
    }
  }

4.效果

Flutter如何添加与iOS通信-BasicMessageChannel

点击第二个按钮后,关闭返回后,如图

Flutter如何添加与iOS通信-BasicMessageChannel

iOS端日志

flutter: Method call: openFlutterView
flutter: name: ksnowlv, age: 10
flutter: MessageChannel name: ksnowlv from iOS, age: 10
Received reply from Flutter:Optional(Data received by Flutter)
Received result from Flutter: Optional({
    count = 4;
    message = "BasicMessageChannel I am air from Flutter";
})
flutter: BasicMessageChannel  send data to iOS: iOS Data received successfully


原文始发于微信公众号(客户端全栈技术养成记):Flutter如何添加与iOS通信-BasicMessageChannel

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/289626.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!