对于Flutter 混合开发比较多,通信必不可少。
一、Channel:
Android与Flutter之间的通信可以通过三种Channel:
-
EventChannel
仅支持数据单向传递,无返回值。用于数据流的通信,持续通信,收到消息后无法回复此次消息。通常用于 Native 向 Dart 的通信。 -
MethodChannel
支持数据双向传递,有返回值。用于传递方法调用,一次性通信。通常用于 Dart 调用 Native 的方法。 -
BasicMessageChannel
支持数据双向传递,有返回值。
三种Channel之间互相独立,各有用途,但它们在设计上却非常相近。每种Channel均有三个重要成员变量:
参数:
- name: String类型,代表Channel的名字,也是其唯一标识符。
- messager:BinaryMessenger类型,代表消息信使,是消息的发送与接收的工具。
- codec: MessageCodec类型或MethodCodec类型,代表消息的编解码器。
(一) channel name 唯一标识
需要两段一致,且唯一。具体用处见下面
(二) BinaryMessenger 消息快递员
定义:三种channel与Flutter通信的工具,都是BinaryMessager
可接纳数据:二进制格式数据
端上表现形式:
Android:FlutterNativeView 接口; Ios:FlutterBinaryMessenger协议
运行流程:
初始化Channel,向Channel注册处理消息的Handler时,会生成一个与之对应的BinaryMessageHandler,并以channel name(上文提到的)为key,注册到BinaryMessenger中。
当Flutter端发送消息到BinaryMessenge