手把手教你如何使用Fair 4.0

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

  1. 支持布局回调

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

  1. fair_version全量映射

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

  1. 语法糖扩充

通过脚本自动生成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提供了生成映射的工具类,如下图所示:

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

  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.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目录下生成了产物说明脚本文件已经跑完没有报错,如下图所示:

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

  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项目,其中一些注意事项也标注出来了,可以帮助开发者快速排查和解决问题,从而降低上手难度。

相关推荐
2601_9498477519 小时前
Form-data 跨端三方库仓颉适配全流程
前端·javascript·flutter
大龄秃头程序员1 天前
Flutter 中我为什么把 GetX 定位为高效率方案,而不是默认架构方案
flutter
传奇开心果编程1 天前
组合优先开发范式:从汉字造字原理到声明式UI组件组合思想
android·flutter·ios·swiftui·移动开发·harmonyos·android jetpack
2501_944521591 天前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
大龄秃头程序员2 天前
Flutter 架构里总被混淆的 IoC、DI、Service Locator,到底是什么关系?
flutter
事圆则缓2 天前
Flutter 与原生交互的最后一层:RTC 视频帧怎么走
flutter·音视频·实时音视频
2601_949847752 天前
jose 跨端三方库仓颉适配全流程
前端·javascript·flutter
2601_949970692 天前
msgpackr 跨端三方库仓颉适配全流程
前端·javascript·flutter
2601_949970693 天前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
传奇开心果编程3 天前
【Flutter踩坑排雷】第3课:const 误用坑|const 错误使用引发 UI 异常与性能损耗
flutter·移动开发·跨平台·dart·编程语言理论·编程框架·声明式ui