Fair2.0专题
● 项目名称:Fair 2.0
● Github地址:https://github.com/wuba/fair
● 项目简介:Fair是为Flutter设计的动态化框架,可以通过Fair Compiler工具对Dart源文件的转化,使项目获得动态更新Widget的能力。Fair 2.0是为了解决 Fair 1.0版本的“逻辑动态化”能力不足。
本文旨在为大家提供 Fair 在实际项目中落地的完整案例,包含了使用 Fair 进行动态页面改造、复杂场景使用、接入过程中遇到的问题、Fair 接入前后的性能对比、热更新方案设计等等内容。
本文重在介绍 Fair 的落地,不会涉及过多的技术原理,如果对 Fair 原理感兴趣的同学,可以阅读以下文章:
本文目录
Fair接入和使用流程
1.1 接入 Fair
对于 Fair 的接入方式,推荐大家使用 源码依赖 的方式,下载地址如下:
git clone https://github.com/wuba/fair.git
在 pubspec.yaml 文件里添加依赖:
假如 Fair 源码和你的项目代码在同一个目录下
另外需要特别注意的是,Fair 内部通过 fair_version 库来做版本控制,所以大家需要根据自己本机的 Flutter SDK 版本来决定 fair_version 的版本。
以我的电脑为例子,我本地使用的 Flutter SDK 版本为 2.5.0,所以我强制指定 fair_version 的版本为 flutter_2_5_0:
1.2 将 Widget 改造为可动态下发的 bundle
将一个 Widget 改造为可以动态下发的 bundle 需要三步。
第一步:改造 main 函数
需要去掉默认的 runApp(MyApp()),然后手动调用一下 WidgetsFlutterBinding.ensureInitialized(),最后用 FairApp 来包裹项目的根 Widget。
第二步:添加 @FairPatch() 注解
在需要改造的 Widget 上添加 @FairPatch() 注解。
第三步:执行 build_runner 命令
执行了 build_runner 即可生成 bundle 资源
flutter pub run build_runner build
1.3 bundle 资源生成位置和组成
bundle 资源的位置,位于:project -> build -> fair 下。
一个 bundle 资源包含了两个文件:一个是 js 文件,一个是 json 文件。
js 文件里面包含的是动态页面的逻辑部分
json 文件包含的是动态页面的布局 DSL
1.4 使用 FairWidget 加载 bundle 资源
bundle 资源生成好以后,我们可以使用 FairWidget 组件对其进行加载。
在本地测试时,我们可以将 bundle 资源拷贝到 assets 目录下,然后将 assets 资源的地址通过