我正在参加「启航计划」
系列(一):NativeBridge:基于webivew_flutter的JSBridge插件
系列(二):NativeBridge:完成原理解析
系列(三):App完成JSBridge的最佳方案
系列(四):NativeBridge:我在Pub上发布的第一个插件
前沿
坦白地说,在发布 native_bridge 之前,自己从没有想过会在 pub 上发布一款自己开发的 Flutter 插件。一方面是觉得自己水平有限,很难产出比较有实用价值的内容。尽管之前有写过 Plugin 开发相关的文章,但那也只是用来自我学习的 Demo,对大家来说没有太多的运用价值。另一方面也是由于对 pub 的发布流程非常生疏,尤其对大陆开发者来说还会遇到一些额外的问题。
而这次能够促使我去发布 NativeBridge 插件,首要还是之前的 NativeBridge 系列文章在的受欢迎度较高,让我感触到了它存在的价值。另一个原因是之前对掘友的许诺,之前掘友希望 NativeBridge 能够适配 webview_flutter ^4.0.1
以上的版别。
尽管间隔上次的回复现已过去了一个多月,但我最终还是完成了许下的许诺^ ^。
NativeBridge 插件
NativeBridge 是基于webview_flutter插件来完成App端和H5端 JS 互调才能的插件。 其详细功用阐明请跳转 Readme 检查,这儿不做过多的介绍。
NativeBridge 现在已成功发布到 pub,需求运用时直接引进即可。
版别更新
这儿简述下插件的版别更新内容:
v0.0.2 版别
1. 优化了音讯回复后还会导致接收端再次发一条承认音讯的问题
原来当 App 收到了 H5 回复的音讯后,还会再发送一条音讯承认音讯。这是没有必要的,这儿进行了优化。
通过在音讯实体 Message 中新增 isResponseFlag
字段来进行区分,关于 isResponseFlag
为 true 的音讯,将不再发送承认音讯。
if (isResponseFlag) {
// 是回来的恳求音讯,则处理H5回调的值
NativeBridgeHelper.receiveMessage(messageJson);
} else {
...
}
2. 关于未识别的 Api 新增容错机制处理
跟着 App版别 的迭代,或许出现某个新的 Api 老的版别无法支持的情况,关于之前的版别来说,当 Api 不匹配时会直接丢弃音讯,等候超时机制处理。这会导致发起端出现 await 情况,直到超时触发回调。这是不适宜的,这次增加了兼容处理。
// 不是回来的恳求音讯,处理H5端的恳求
var callMethod = callMethodMap[messageItem.api];
if (callMethod != null) {
// 有相应的JS办法,则处理
...
} else {
// 若没有对应办法,则回来null,防止低版别未支持Api堵塞H5
messageItem.data = null;
}
v1.0.0版别
1. 适配webview_flutter ^4.0.5版别
现在插件引进的 webview_flutter 版别为: ^4.0.5
,后续也会跟着 webview_flutter 插件的迭代而晋级,直到其才能被官方替代停止。
2. 对完成方式进行重构
由于新版别的 webview_flutter 将大部分的 WebView 操作功用移入 WebViewController 处理,因此我们的 NativeBridge 插件也同步进行调整。
现在运用只需求新增 AppBridgeController
承继 NativeBridgeController 完成其对应办法即可正常运用。
class AppBridgeController extends NativeBridgeController {
AppBridgeController(WebViewController controller) : super(controller);
/// 指定JSChannel名称
@override
get name => "nativeBridge";
@override
Map<String, Function?> get callMethodMap => <String, Function?>{
// 版别号
"getVersionCode": (data) async {
return await AppUtil.getVersion();
},
...
};
}
// 初始化AppBridgeController
_appBridgeController = AppBridgeController(_controller);
总结
关于还在运用 webview_flutter 3.0+ 版别的项目,引证 ^0.0.2
版别:
native_bridge: ^0.0.2
关于运用 webview_flutter 4.0+ 版别的项目,引证 ^1.0.0
版别:
native_bridge: ^1.0.0
感悟
NativeBridge插件的成功发布,这个过程中也让我受益良多。
开始学会从 SDK 开发者的视点去思考问题,测验思考如何简化插件的运用、丰富插件的才能,更关注插件的内在结构和对外的协议。也了解到在开源项目中包含开源协议、pub 的 scores 标准、README、CHANGELOG的定义等。
这也是自我的一次成长,愿你我一起共勉!