三种Channel之间互相独立,各有用途,但它们在设计上却非常相近。
每种Channel均有三个重要成员变量:
Binarymessenger 在 iOS 和 Android 上分别是什么? 在Android端是一个接口,其具体实现为FlutterNativeView。 在iOS端是一个协议,名称为FlutterBinaryMessenger,FlutterViewController 遵循了它。
Flutter定义了两种Codec:MessageCodec 和 MethodCodec。
BinaryCodec
StringCodec
JSONMessageCodec
StandardMessageCodec (默认如果不指定)
JSONMethodCodec JSONMethodCodec的编解码依赖于JSONMessageCodec 当其在编码MethodCall时,会先将MethodCall转化为字典 {"method":method,"args":args}。 其在编码调用结果时,会将其转化为一个数组,调用成功为[result],调用失败为[code,message,detail]。再使用JSONMessageCodec将字典或数组转化为二进制数据。
StandardMethodCodec MethodCodec的默认实现,StandardMethodCodec的编解码依赖于StandardMessageCodec,当其编码MethodCall时,会将method和args依次使用StandardMessageCodec编码,写入二进制数据容器。其在编码方法的调用结果时,若调用成功,会先向二进制数据容器写入数值0(代表调用成功),再写入StandardMessageCodec编码后的result。而调用失败,则先向容器写入数据1(代表调用失败),再依次写入StandardMessageCodec编码后的code,message和detail。