Flutter Platform Channel 浅析

2022-12-05  本文已影响0人  曾大稳丶

背景

Flutter 是目前市面上比较多人选择的一个跨平台 UI 开发框架, 跨平台肯定会涉及到和 Native 交互,比如获取屏幕宽高,获取电量信息等等。Flutter 提供了 Platform Channel 作为交互的方式。

Platform Channel 的内部主要组成

主要由如下三部分组成:

// 二进制数据的通讯抽象
@NonNull private final BinaryMessenger messenger;
// 该 Platform Channel 的名称
@NonNull private final String name;
// 协议编解码器
@NonNull private final MessageCodec<T> codec;

MessageCodec 种类

如上所说,MessageCodec 的作用用于二进制数据和我们需要的类型数据进行编解码转换。目前官方支持类型有如下(没有列举完全):

Platform Channel 种类

Platform Channel 目前有如下几种类型:

类型 说明 通讯方向 是否有回调
BasicMessageChannel 指定一种类型数据进行通讯 双向
MethodChannel 指定函数调用通讯 双向
EventChannel 用于数据流的通讯(Flutter 订阅,Native 发送) Native -> Flutter

总结

Platform Channel 只是为了方便使用(开发者只需要关心发送事件和接收事件)所进行的一个封装聚拢,对外隐藏了数据发送和接收实现的细节,根据场景选择不同的 Platform ChannelMessageCodec

Platform Channel 的设计非常的棒,可以看到非常好的设计思路,值得我们学习。比如 MethodChannel ,从命名上来看,是针对函数调用的一个通讯;从职责上来看很单一,就是用于通讯告知执行那个函数(单一职责);从扩展上来看,对外开放需要通讯的BinaryMessenger(多引擎有不同的BinaryMessenger),数据编解码器 MessageCodec(依赖倒置原则,接口隔离原则);从实现上来看,内部自己进行了实现,并没有其他多余的耦合;从使用上来看,开发者关注的也很简单纯粹(最少知道原则)。

上一篇 下一篇

猜你喜欢

热点阅读