Day09 Platform Channel - BasicMessageChannel

如同前面介绍的,Flutter 定义了三种不同型别的Platform Channel 在platform_channel.dart,让Flutter 在与Native 通讯中,能够依讯息的资料型别来分类传输,在 Flutter(包括 android 中也存在与之对应的)中存在三种型别的讯息,就是前面提过的 BasicMessageChannelMethodChanelEventChannel,每一种 Channel 的建购函式都至少需要两个引数,与之系结的讯息型别(讯息的 name)和编码方式(MessageCodec/MethodCodec)

  • BasicMessageChannel:用於双向的单次讯息传递,包括发送讯息、接收讯息两个功能。传送讯息使用 send 函式,返回值是 Future

      Future<T?> send(T message) async {
        return codec.decodeMessage(await binaryMessenger.send(name, codec.encodeMessage(message)));
      }
    

    BasicMessageChannel主要功能如上,呼叫 binaryMessenger.send,并在前後用BasicMessageChannel对应的Codec MessageCodec,对 message 进行编解码,且send 函式的引数与返回值是同一种型别

    setMessageHandler 则是用於向 binaryMessenger 注册一个MessageHandler来处理接收讯息

    void setMessageHandler(Future<T> handler(T message)) {
      if (handler == null) {
        binaryMessenger.setMessageHandler(name, null);
      } else {
        binaryMessenger.setMessageHandler(name, (ByteData message) async {
          return codec.encodeMessage(await handler(codec.decodeMessage(message)));
        });
      }
    }
    

    主要还是由MessageHandler 处理讯息,BasicMessageChannel 所做的只是在处理前後将 message 编解码


<<:  Day12 while实作

>>:  范例(二)预测心血管疾病的可能性

快来让电脑变顺并提升 Mac 的速度吧

磁碟空间快满了 好多朋友胡乱将各种档案存储在 MacBook 里,但又没有定期整理资料的习惯。时间...

DAY 27 如何使用PyImgur

获得已上传图片资讯 修改自官网范例 import pyimgur CLIENT_ID = "...

[Day27] Vue 3 - 方法

今天练习到 Vue 里面的 methods(方法),过去使用纯 JS 监听事件触发後,就会透过函式来...

[第四只羊] 迷雾森林建筑工事 III 透过Jumpstarter建立新专案

天亮了 昨晚是平安夜 关於迷雾森林故事 洛神降临 图片来源 她就是洛神啊 以前只听过爸妈说过 这还是...

均线 - 支撑与压力

在技术面上,我们常听到支撑跟压力,今晚来说明一下,支撑型态与压力型态 以光宝科2301来说 上升趋势...