iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Mobile Development

Flutter - 從 Packages & Plugins 掌握原生系列 第 9

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 編解碼


上一篇
Day08 Flutter 和 Native 通訊的原理 02
下一篇
Day10 Platform Channel - MethodChannel
系列文
Flutter - 從 Packages & Plugins 掌握原生30

尚未有邦友留言

立即登入留言