NOW直播——Flutter组件化开发方案

采用组件化开发Flutter,将会有如下的优势:

  1. 将功能模块化,相互独立,方便管理
  2. 模块之间互不影响,耦合低,一些与业务无关的模块可以开源出来,供其他APP使用,提供代码的复用。
  3. 采用组件化开发,开发时互不影响,可以提高开发效率。
  4. 方便单元测试

下面介绍Flutter组件化开发的具体内容。

3.从Platform Channel说起

  • 定义

Platform Channel为Dart和平台之间提供了相互通信的机制,将Flutter、Android、iOS连接起来。

在移动H5开发中,webview自身提供的功能往往不够用,为了解决这个问题,引入了jsbridge,即web与native之间进行数据交互的一种方法,可以方便的将native的功能扩展给webview使用,从而可以快速开发。在Flutter中,也存在和jsbridge一样的用法,那就是Platform Channel,我们可以通过Platform Channel,将Flutter和Native方便的连接在一起,架构图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在Channel中

  1. client发送信息
  2. host接受信息并返回结果
  3. 而且消息和响应是以异步方式传递的
  4. Flutter和Natvie可以互为client和host,信息传递是双向的

而且在Flutter中实现一个Channel也非常简单,假如Flutter作为client,Native作为Host,只需要:

  1. 在Flutter层声明一个Channel,发送消息到Native,等待Native结果返回

static const platform = const MethodChannel(‘samples.flutter.io/battery’);
int result = await platform.invokeMethod(‘getBatteryLevel’);

  1. 在Native层注册Channel的监听,当收到从Flutter层发送过来的消息时,将结果返回给Flutter

new MethodChannel(getFlutterView(),“samples.flutter.io/battery”).setMethodCallHandler(
new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals(“getBatteryLevel”)) {
return batteryLevel;
}
}}
);

从中我们可以发现,写一个Flutter的Platform Channel非常简洁而且轻量。而且相较于H5的jsbridge,Platform Channel也具有如下的几个优势:

  1. Platform Channel是Flutter自带的功能,不需要额外的开发,接口简洁,调用方便。
  2. Platform Channel比jsbridge有更好的性能表现
  3. 更重要的是Platform Channel底层实现统一,更聚焦于数据之间的传递,不像jsbridge,如果使采用不同方法实现的jsbridge,代码是无法通用的,而Platform Channel却可以做到更通用,

Platform Channel作为连接Flutter和Native的部分,在混合开发模式中非常重要,是作为底层重要架构的存在,因此可以将Platform Channel单独作为一个模块,将Flutter工程中的Plaform Channel和UI代码分开,那么如何将Platform Channel模块化呢?这里就要讲到一个新的概念:Flutter plugin.

4.Flutter Plugin

  • 定义

一个在Android、iOS、Dart上实现Platform Channel代码的软件包

因此一个完整的Flutter Plugin 包含三种平台的代码:

  1. Android平台的Java或Kotlin
  2. iOS平台的ObjC或者Swift
  3. Flutter平台的Dart

所以Platform Channel可以使用Flutter plugin来实现模块化,这意味着可以将一些通用的功能在不同的APP上使用,例如:登录模块、图片库模块、网络库模块、数据库模块等。

创建Flutter Plugin的方法也很简单:

  1. Android Studio

在Android Studio上安装Flutter的插件后,可以通过:

File -> New -> New Flutter Project... -> Flutter Pulgin

  1. 命令行

$ flutter create --org com.example --template=plugin hello

在创建完工程后,我们就可以实现我们想要的Platform Channel功能。那我们又如何共享我们的Flutter Plugin呢?熟悉Android开发的同学,都知道Maven仓库,Flutter也有类似的软件包仓库,就是Pub.

5.Pub

  • 定义

Pub是Dart语言的包管理器,包含Flutter、AngularDart和一般Dart程序。

  • 使用

我们可以在pub.dartlang.org/上面查找我们想要用的软件包,例如protobuf:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 在搜索结果页,找到我们想要的包:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 使用的时候只要将包名和版本号加入到工程的pubspec.yaml里:

dependencies:
protobuf: ^0.10.4

​ 并运行命令行安装包:

$ flutter packages get

​ 就可以在工程使用了。说完使用,那如何将我们自己的Flutter Plugin的包提供给别人使用呢?就需要我们将包上传到Pub。

  • 上传

将一个包上传到Pub,需要三个步骤:

  1. 确保pubspec.yaml里面的相关配置填写正确,README.mdCHANGELOG.md最好也补充完整。

  2. 在上传前,先运行dry-run命令查看是否所有内容可以通过检测

$ flutter pacakges pub publish --dry-run

3.上传

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
习之门**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值