目录
channel的创建
channel的创建需要两个参数
name:channel的唯一标识
binaryMessenger:消息信使,用于消息的接收和发送,可以传入FlutterViewController的实例
+ (instancetype)methodChannelWithName:(NSString*)name
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger;
调用到内部还有一个参数:codec
channel回调的实现
self.flutterInitChannel = [FlutterMethodChannel methodChannelWithName:@"syncData" binaryMessenger:self.engine.binaryMessenger];
[self.flutterInitChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) {
__strong typeof(self) strongSelf = weakSelf;
[[FZFlutterChannelManager sharedInstance] dispatchChannel:call result:result context:strongSelf];
}];
调用过程如下:
本质是:
name做为key,handler被包裹一层后做为value,存储在一个map里边。
后续可以根据key获取到handler。
channel的codec
一、两种编解码器
FlutterMessageCodec
二进制和oc对象的编解码
FlutterMethodCodec
Methodcodec
Call和二进制的编解码
二、解码器的核心是读和写
跨平台的数据都要变成二进制
写的时候先写标志位再写数据
读的时候先读标志位在读数据
行者常至,为者常成!