首先回顾一下fair 4.0的一些新特性:
- 支持布局回调
通过解析布局全量语法树信息,获取对应的回调函数信息,并且生成函数映射,从而实现对布局回调支持。
- fair_version全量映射
会生成Flutter SDK 以及 dart:ui的全量映射。
- 语法糖扩充
通过脚本自动生成dart:core 对应的语法糖,从而实现了SugarBool 、SugarString 、SugarMap等全量的API。
新老版本特性对比
Fair 老版本 | Fair 4.0 | |
---|---|---|
布局回调 | FairDelegate /FairPlugin | FairDelegate /FairPlugin&函数映射 |
fair_version | Fair官网团队适配的flutter version | flutter.dart 生成用户所需要的特定flutter version |
语法糖 | Sugar.ifRange /Sugar.ifEqual /Sugar.ifEqualBool /Sugar.mapEach /Sugar.map /Sugar.listBuilder | dart_core.dart生成语法糖全量api |
前置知识
工具类介绍
fair 4.0提供了生成映射的工具类,如下图所示:
首先介绍一下相关的文件的作用,具体的实现可以读一下源码或者断点追一下实现,原理并不复杂
- binding.dart
用于import自定义/三方组件,如下图所示
- app.dart
用于生成自定义组件的映射
- flutter.dart
用于生成flutter系统组件的映射
- packages.dart
用于生成第三方组件的映射
- dart_core.dart
生成dart:core语法糖全量api
6. extension.dart
生成一个空的文件,用于扩展语法糖
7. fair_common_plugin.dart
生成与js通信的plugin文件,生成后需要手动注册
上述文件都属于脚本类型文件,用户一般无需修改,直接运行main()方法生成相关的产物即可
产物介绍
接下来依次运行app.dart 、flutter.dart 和packages.dart生成产物,如下图所示:
其中xx.bindings.dart 是生成的组件映射,xx.funciton.dart是生成的函数映射
依次运行dart_core.dart、extension.dart 和 fair_common_plugin.dart生成下述产物
开发具体流程
1.创建项目
将fair项目里example 目录下的bin 文件copy到自己的项目里,然后移除binding.dart 里相关的import
2.添加fair依赖
将组件库项目里pubspec.yaml 文件添加fair相关依赖,然后执行pub get
3.编写组定义组件
编写完之后在binding.dart 里import
4.修改产物生成路径
修改bin/util/utils.dart 文件里getProjectDirectory()里的projectName,这里修改成你当前项目的名称即可
5.运行脚本
依次运行app.dart 、flutter.dart ,由于没有引入第三方组件,所以不需要运行packages.dart也可以,运行了会生成空的映射也是没有问题的
如果看到src/generated_module目录下生成了产物说明脚本文件已经跑完没有报错,如下图所示:
如果生成产物有报错,不用慌张,下面是常见的几种报错:
- 缺少导包语句,手动导包即可。如果是因为默认值导致的,可以优化默认赋值逻辑,避免在生成的映射文件里进行导包操作
- 返回类型报错,当生成的产物带泛型T时,由于无法识别就会报错,可以修改为dynamic类型
- 类型转换错误,修改至正确类型即可
- 缺少默认值,可以从源码把对应的默认值(一般是常量)copy出来即可
遇到上述问题我们不要着急,大部分报错常见于flutter.dart 生成的映射文件,而flutter.dart 一般我们生成后就不会再执行了,大多数情况下只会修改一次即可,除非是需要更换flutter version重新生成
接下来按需运行dart_core.dart/fair_common_plugin.dart ,去生成dart:core 语法糖全量api以及FairCommonPlugin (与js交互的插件,需要在FairApp.runApplication() 里去注册)
6.改造main文件
以支持fair动态加载产物(具体可参考fair里的example项目)
7.补全生成的产物
其实这里就是将所有的生成产物汇总到g.FairAppModule() 一个文件里,如下图所示
8.编写fair example
需要 @FairPatch 注解对页面进行标注,如果需要入参则通过 @FairProps 进行标注然后从fairProps 里面取值,可参考下面示例代码:
9.生成fair产物
执行build_runner 命令,可以从fair项目里把build_runner.sh copy到项目里,然后将产物放到assets下
build_runner.sh 的命令参考如下:
10.效果展示
运行效果,显示正常没有报错,大功告成
技术总结
从这篇文章中,你不仅可以了解到fair 4.0的一些新特性,还可以学习到如何基于release-4.0分支快速开发fair项目,其中一些注意事项也标注出来了,可以帮助开发者快速排查和解决问题,从而降低上手难度。