Flutter_Channel

作者: iOS小洁 | 来源:发表于2022-12-24 22:08 被阅读0次

Platform Channel 机制

Platform Channel机制用来实现Flutter与原生的通信。Platform Channel通讯是通过消息传递的方式进行。工作原理类似于二进制协议开发的网络服务

Flutter Channel

Flutter提供了三种Channel:

  • FlutterBasicMessageChannel :用作字符串与半结构化的数据传递
    • 结构化数据:包括预定义的数据类型,格式和结构的数据,如关系数据库中数据表里的数据
    • 半结构化数据:具有可识别的模式并可以解析的文本数据文件,如xml数据文件
    • 非结构化数据:没有固定结构的数据,通常保存为不同类型的文件,如文本,图片,视频等
  • FlutterMethodChannel:用来调用方法,原生与flutter相互调用
  • FlutterEventChannel:支持数据流通信

关键成员变量

1、name

每个Channel唯一标志,通过name区分多个channel

2、messenger:BinaryMessager

用作消息的发送和接收的工具,主要负责Flutter与原生的相互通讯

创建一个Channel后,不论是通过设置代理还是设置handler回调来处理消息。最终都会为该Channel绑定一个FLutterBinaryMessageHandler。并且是以name为key,保存在一个Map结构中。当接收到消息后,会根据消息中携带的name取出对应的FLutterBinaryMessageHandler,并交由BinaryMessenger处理

3、codec编解码器

Flutter中采用二进制字节流作为数据传输协议。codec负责二进制编解码

messageCodec:对message进行编解码,用于二进制数据与基础数据之间的编解码,有多中实现

  • FlutterStandardMessageCodec:是FlutterBasicMessageChannel中默认编解码器。用于数据类型和二进制数据之间的编解
  • FlutterBinaryCodec:用于二进制与二进制之间的编解码
  • FlutterStringCodec
  • FlutterJSONMessageCodec:iOS 使用NSJSONSerialization作为序列号工具

FlutterMethodCodec:对FlutterMethodCall编解码。比FlutterMessageCodec多了两个处理调用结果的方法

  • FlutterJSONMethodCodec
  • FlutterStandardMethodCodec

Handler消息处理

Handler用于处理经过Codec编码后的消息。在使用Channel时需要为其设置对应的Handler

typedef void (^FlutterMessageHandler)(id _Nullable message, FlutterReply callback);
typedef void (^FlutterMethodCallHandler)(FlutterMethodCall* call, FlutterResult result);
@protocol FlutterStreamHandler
- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments
                                       eventSink:(FlutterEventSink)events;
- (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments;
@end

相关文章

  • Flutter_Channel

    Platform Channel 机制 Platform Channel机制用来实现Flutter与原生的通信。P...

网友评论

    本文标题:Flutter_Channel

    本文链接:https://www.haomeiwen.com/subject/lkjiqdtx.html