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

相关推荐
louisgeek6 小时前
Flutter autoDispose、keepAlive 和 ref.keepAlive 的区别
flutter
左手厨刀右手茼蒿10 小时前
Flutter 三方库 firebase_admin 跨云边管线企业级鸿蒙管控底座适配风云:无障碍贯穿服务器授权防火墙打通底层生态授权域并构建海量设备推送集结-适配鸿蒙 HarmonyOS ohos
服务器·flutter·harmonyos
钛态10 小时前
Flutter for OpenHarmony:shelf_web_socket 快速构建 WebSocket 服务端,实现端到端实时通信(WebSocket 服务器) 深度解析与鸿蒙适配指南
服务器·前端·websocket·flutter·华为·性能优化·harmonyos
亚历克斯神10 小时前
Flutter 三方库 at_server_status 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、实时的 @protocol 去中心化身份服务器状态感知与鉴权监控引擎
flutter·华为·harmonyos
左手厨刀右手茼蒿13 小时前
Flutter 三方库 k_m_logic 的鸿蒙化适配指南 - 构建声明式的业务逻辑状态机、助力鸿蒙端复杂交互流程的解耦与重构
flutter·harmonyos·鸿蒙·openharmony·k_m_logic
钛态13 小时前
Flutter 三方库 result_type 深入鸿蒙强类型返回栈跨界交互适配:肃清空指针回调与运行时崩溃、大幅增注接口安全壁垒且提升多隔离桥接数据抛出健壮性-适配鸿蒙 HarmonyOS ohos
flutter·交互·harmonyos
左手厨刀右手茼蒿13 小时前
Flutter 三方库 invertible 的鸿蒙化适配指南 - 实现极致的撤销与重做流、助力鸿蒙端高交互编辑类应用开发
flutter·harmonyos·鸿蒙·openharmony
恋猫de小郭13 小时前
2026 AI 时代下,Flutter 和 Dart 的机遇和未来发展,AI 一体化
android·前端·flutter
加农炮手Jinx13 小时前
Flutter 三方库 fast_i18n 的鸿蒙化适配指南 - 掌握类型安全的国际化编译技术、助力鸿蒙应用构建全球化且极速响应的多语言交互体系
flutter·harmonyos·鸿蒙·openharmony·fast_i18n
钛态13 小时前
Flutter 三方库 test_process 的鸿蒙化适配指南 - 实现具备外部进程交互与命令行输出校验的集成测试套件、支持端侧 CLI 工具与自动化脚本协同实战
flutter·harmonyos·鸿蒙·openharmony·test_process