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

相关推荐
nicepainkiller16 小时前
Flutter 内嵌 unity3d for android
flutter·unity3d
恋猫de小郭16 小时前
Flutter Web 正式移除 HTML renderer,只支持 CanvasKit 和 SkWasm
前端·flutter·html
江上清风山间明月16 小时前
flutter编译e: Daemon compilation failed: null java.lang.Exception错误解决
java·flutter·exception·daemon·compilation
大G哥16 小时前
Flutter如何调用java接口如何导入java包
java·开发语言·flutter
m0_7482409119 小时前
【Flutter】webview_flutter使用详解
flutter
Domain-zhuo20 小时前
React和Vue.js的相似性和差异性是什么?
前端·vue.js·flutter·react.js·前端框架
ChinaDragonDreamer1 天前
Flutter:开发环境搭建和Android Studio创建Flutter Project
android·flutter·android studio
chengxuyuan1213_1 天前
组件如何与父组件通信
flutter
古希腊被code拿捏的神2 天前
【flutter】webview下载文件方法集锦
flutter
CherishTaoTao2 天前
flutter中provider的进阶用法小结(一)
前端·javascript·flutter