Fair是为Flutter设计的动态化框架,通过Fair Compiler工具对原生Dart源文件的自动转化,使项目获得动态更新Widget的能力。
Fair is a dynamic framework designed for Flutter, which enables projects to dynamically update Widget through the automatic conversion of native Dart source files through the Fair Compiler tool.
在线文档:https://fair.58.com/
Fair的UI渲染是无损的,可以做到像素级别的还原,看一张转义Best Flutter UI Templates部分页面后的效果:
使用的工程来自 https://github.com/mitesh77/Best-Flutter-UI-Templates
为了方便接入&体验Fair框架,请确认你的Flutter运行环境,可以根据实际情况切换版本。目前支持版本(如遇问题,Issue反馈):
# Switch to another stable flutter version
#dependency_overrides:
# fair_version:
# path: ../fair/flutter_version/flutter_2_5_0
https://flutter.dev/docs/development/tools/sdk/releases?tab=macos
注意:由于部分版本flutter构建脚本存在巨大变化,会导致同一个模板工程无法同时运行在不同版本。
Fair的example位于fair/example目录,同时也附带了一些社区demo并转为fair动态化形式,工程位于samples目录下,克隆后直接build对应仓库即可即可。
samples
├── adobe_xd // adobe_xd插件demo, xd插件可以从设计稿直接导出flutter代码
├── best_flutter_ui_templates // 一个UI很漂亮的Flutter模板项目
└── my_app // 经典的Flutter Hello World
├── README.md
├── android
├── assets
├── build
├── ios
├── lib
├── my_app.iml
├── pubspec.lock
├── pubspec.yaml
├── test
└── web
更多接入操作请参考 https://fair.58.com/
- Flutter动态化框架Fair文档上线&开源倒计时
- Flutter动态化框架Fair的设计与思考
- Fair 2.0 逻辑动态化开源了!
- Fair逻辑动态化架构设计与实现
- Fair逻辑动态化通信实现
- Fair下发产物-布局DSL生成原理
- Fair 逻辑语法糖设计与实现
- Fair热更新设计与实现
- Fair在安居拍房App中的实践
- Flutter 动态化项目评测
-
开源准备 2020
- 项目清理 ✅
- 对外文档准备 ✅
- 官网准备 https://fair.58.com ✅
- Github开源 https://github.com/wuba/fair ✅
- i18n
⚠️ ✅
-
Bug修复
- Github issue处理✅
-
维护迭代 2021
- Framework适配优化✅
- 局部刷新支持 ✅
- 状态库支持Provider ✅
- 独立cli工具
- 转化优质Demo ✅
- 动画支持的形式
- Flutter Favorite Package支持 ✅
- 其他Top UI Package支持
- 逻辑组件优化 ✅
- CI流程✅
- 社区插件贡献方式
-
Fair 2.0
- 支持逻辑运算 ✅
- 默认支持网络、权限选择和图片选择插件 ✅
- 支持第三方插件在逻辑运算中的扩展 ✅
- 支持布局build方法的子方法拆封 ✅
- 支持布局和逻辑的混编 ✅
- 转换工具开源 ✅
由于dart语法解析工作量奇大,会有部分语法和特殊使用方式的限制。 下面是一些,不支持特性&已知问题:
刘阳、王海君、林乐洋、卜杰、罗正龙、柯超、单鹏涛、李昊、谢雄亮、赵倩、陈有余、刘超、孙哲
通过Issue提交问题,贡献代码走Pull Request,管理员将对代码进行审核。
对Fair感兴趣的小伙伴,可以加入交流群。技术咨询、讨论,请移步至
微信 | 美事(内部) |
---|---|
微信入群:请先添加58技术小秘书为好友,备注fair,小秘书邀请进群。
自查步骤(新手必读)
- 核对flutter版本与readme说明,确认该版本已被Fair支持
- 核查version分支版本于flutter一致,且等同于第一步版本号
- 如果尚未看过文档,请先运行自带的sample,能跑起来再接入app
- 遇到编译错误,请查看终端日志,过滤fair关键词
- 使用动态化组件的过程中,不建议格式化生成的Javascript文件,格式化工具可能会修改文件内容,导致执行报错
- 到github提issue,或gitter。留档/解决,并提供flutter环境信息
flutter doctor --verbose
- 为什么没有bin产物?
bin为可选的flatbuffer产物,fair 2期开源了 fairc和dart2js编译转换工具。
- 执行flutter pub run build_runner build后没有产物?
请根据适配要求,核查flutter,dart版本
- 执行flutter pub run build_runner build后,提示编译错误信息?
根据错误日志,有几种情况:1.原代码中存在逻辑表达式,语法解析不通过,尝试剥离逻辑为module;2..dart_tool
文件权限问题,请删除后重试
Fair项目基于BSD协议开源。我们使用的更多依赖库详见pubspec.yaml
感谢UXD的Kaibin老师提供设计支持
点亮Star是对Fair团队最大的支持,感谢!