NativeBridge:我在Pub上发布的第一个插件

系列(一):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 字段来进行区分,对于 isResponseFlagtrue 的消息,将不再发送确认消息。

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的定义等。

这也是自我的一次成长,愿你我一起共勉!

作者:Fitem
链接:https://juejin.cn/post/7204349756620210236

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。

在这里插入图片描述
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:

一、面试合集
在这里插入图片描述
二、源码解析合集

在这里插入图片描述
三、开源框架合集

在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值