手把手教你如何使用Fair 4.0

首先回顾一下fair 4.0的一些新特性:

  1. 支持布局回调

通过解析布局全量语法树信息,获取对应的回调函数信息,并且生成函数映射,从而实现对布局回调支持。

  1. fair_version全量映射

会生成Flutter SDK 以及 dart:ui的全量映射。

  1. 语法糖扩充

通过脚本自动生成dart:core 对应的语法糖,从而实现了SugarBoolSugarStringSugarMap等全量的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提供了生成映射的工具类,如下图所示:

首先介绍一下相关的文件的作用,具体的实现可以读一下源码或者断点追一下实现,原理并不复杂

  1. binding.dart

用于import自定义/三方组件,如下图所示

  1. app.dart

用于生成自定义组件的映射

  1. flutter.dart

用于生成flutter系统组件的映射

  1. packages.dart

用于生成第三方组件的映射

  1. dart_core.dart

生成dart:core语法糖全量api

6. extension.dart

生成一个空的文件,用于扩展语法糖

7. fair_common_plugin.dart

生成与js通信的plugin文件,生成后需要手动注册

上述文件都属于脚本类型文件,用户一般无需修改,直接运行main()方法生成相关的产物即可

产物介绍

接下来依次运行app.dartflutter.dartpackages.dart生成产物,如下图所示:

其中xx.bindings.dart 是生成的组件映射,xx.funciton.dart是生成的函数映射

依次运行dart_core.dart、extension.dartfair_common_plugin.dart生成下述产物

开发具体流程

1.创建项目

将fair项目里example 目录下的bin 文件copy到自己的项目里,然后移除binding.dart 里相关的import

2.添加fair依赖

将组件库项目里pubspec.yaml 文件添加fair相关依赖,然后执行pub get

3.编写组定义组件

编写完之后在binding.dartimport

4.修改产物生成路径

修改bin/util/utils.dart 文件里getProjectDirectory()里的projectName,这里修改成你当前项目的名称即可

5.运行脚本

依次运行app.dartflutter.dart ,由于没有引入第三方组件,所以不需要运行packages.dart也可以,运行了会生成空的映射也是没有问题的

如果看到src/generated_module目录下生成了产物说明脚本文件已经跑完没有报错,如下图所示:

如果生成产物有报错,不用慌张,下面是常见的几种报错:

  1. 缺少导包语句,手动导包即可。如果是因为默认值导致的,可以优化默认赋值逻辑,避免在生成的映射文件里进行导包操作
  2. 返回类型报错,当生成的产物带泛型T时,由于无法识别就会报错,可以修改为dynamic类型
  1. 类型转换错误,修改至正确类型即可
  1. 缺少默认值,可以从源码把对应的默认值(一般是常量)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项目,其中一些注意事项也标注出来了,可以帮助开发者快速排查和解决问题,从而降低上手难度。

相关推荐
Zsnoin能6 小时前
flutter国际化、主题配置、视频播放器UI、扫码功能、水波纹问题
flutter
早起的年轻人7 小时前
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
flutter·ios
HappyAcmen7 小时前
关于Flutter前端面试题及其答案解析
前端·flutter
coooliang16 小时前
Flutter 中的单例模式
javascript·flutter·单例模式
coooliang16 小时前
Flutter项目中设置安卓启动页
android·flutter
JIngles12316 小时前
flutter将utf-8编码的字节序列转换为中英文字符串
java·javascript·flutter
B.-19 小时前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
freflying11191 天前
使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
android·flutter·jenkins
机器瓦力1 天前
Flutter应用开发:对象存储管理图片
flutter
江上清风山间明月2 天前
Flutter最简单的路由管理方式Navigator
android·flutter·ios·路由·页面管理·navigator