Skip to content

Latest commit

 

History

History
292 lines (217 loc) · 14.3 KB

README-zh.md

File metadata and controls

292 lines (217 loc) · 14.3 KB

social preview

pub github doc license build Gitter

简体中文|English


Fair是为Flutter设计的动态化框架,通过Fair Compiler工具对原生Dart源文件的自动转化,使项目获得动态更新Widget的能力。

Fair 的接入和使用,建议大家阅读在线文档:

在线文档:https://fair.58.com/

Fair的UI渲染是无损的,可以做到像素级别的还原,看一张转义Best Flutter UI Templates部分页面后的效果:

best-ui-template

使用的工程来自 https://github.com/mitesh77/Best-Flutter-UI-Templates
项目位置:/example/lib/best_flutter_ui

🏛 架构

fair architecture

🚀 快速接入

简单几步,接入Fair.

step1:同步fair工程代码

推荐同步 fair 相关代码,并且进行本地依赖:

同步方式:

git clone https://github.com/wuba/fair.git

step2:在 pubspec.yaml 添加依赖

将Fair工程和对应的业务工程放在同一个目录中,并添加依赖:

# add Fair dependency
dependencies:
  fair: 2.7.0

# add build_runner and compiler dependency
dev_dependencies:
  build_runner: ^2.0.0
  fair_compiler: ^1.2.0

# switch "fair_version" according to the local Flutter SDK version
# Flutter SDK 3.0.x(3.0.0、3.0.1、3.0.2、3.0.3、3.0.4、3.0.5) -> flutter_3_0_0
# Flutter SDK 2.10.x(2.10.0、2.10.1、2.10.2、2.10.3) -> flutter_2_10_0
# Flutter SDK 2.8.x(2.8.0、2.8.1) -> flutter_2_8_0
# Flutter SDK 2.5.x(2.5.0、2.5.1、2.5.2、2.5.3) -> flutter_2_5_0
# Flutter SDK 2.0.6 -> flutter_2_0_6
# Flutter SDK 1.22.6 -> flutter_1_22_6
dependency_overrides:
  fair_version:
    path: ../fair/flutter_version/flutter_3_0_0

step3:将App替换为FairApp

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  FairApp.runApplication(
    _getApp(),
    plugins: {
    },
  );
}

dynamic _getApp() => FairApp(
  modules: {
  },
  delegate: {
  },
  child: MaterialApp(
    home: FairWidget(
            name: 'DynamicWidget',
            path: 'assets/bundle/lib_src_page_dynamic_widget.fair.json',
            data: {"fairProps": json.encode({})}),
  ),
);

step4:添加FairWidget作为动态Widget

FairWidget(
name: 'DynamicWidget',
path: 'assets/bundle/lib_src_page_dynamic_widget.fair.json',
data: {"fairProps": json.encode({})}),

🔨最近版本

2.6.0

更新时间:2022.07.05

Fair

  • 1.Fair 支持加载手机磁盘路径上的 bundle 文件;
  • 2.适配 Flutter SDK 2.10.0、2.10.1、2.10.2、2.10.3 版本;
  • 3.Dart2JS 支持解析 static 方法;
  • 4.运行时,页面错误信息提示优化;
  • 5.语法糖支持解析 Model 数据。

2.5.0

更新时间:2022.05.31

Fair
  • 适配 Flutter SDK 2.8.0、2.8.1
  • Dart2JS 支持解析单例
  • 新增语法糖Sugar.switchCase、Sugar.colorsWithOpacity、Sugar.convertToString等
example

全面优化example结构,升级example体验,更适合新手入门。
在源码中,新增 example 工程,用于提供 Fair API 的标准用法。

example 工程位置:fair/example

2.4.1

更新时间:2022.05.12

Fair
  • 修复 FairLogger 文件导包问题
  • 升级 analyzer 到 2.3.0

2.4.0

更新时间:2022.04.26

Fair
  • FlatBuffers 支持在 null safe 环境下生成 bin 文件

2.3.0

更新时间:2022.04.22

Fair

  • 支持空安全 null-safe
  • 适配Flutter SDK 2.5.0、2.5.1、2.5.2、2.5.3等版本

demo

  • 升级 sample 工程里过时的demo
  • 补充 sample 工程里 iOS 的运行环境

🕰2022 规划

  • 主版本计划
    • null-safe 版本支持,预计4月22日上线 ✅
    • Flutter 2.8.0版本适配,预计5月中旬上线 ✅
    • Flutter 2.10.0版本适配,预计6月初上线
    • IDE 语法检测和提示插件
    • 丰富语法糖
  • 热更新平台
    • Dart Server工程搭建 ✅
    • Flutter Web工程搭建 ✅
    • 补丁/资源管理
    • 项目管理
    • 移动端 Update&Download
  • 线上动态化
    • Flutter Web工程搭建 ✅
    • Dart Server工程搭建 ✅
    • Action编辑
    • 代码编辑
    • 组件编辑
    • 页面编辑
    • 工程编辑
    • Flutter效果预览
    • Fair DSL预览

✨️ 贡献者

Thanks goes to these wonderful people (emoji key):


Wu

💻 📖

Penta

💻 📖

haijun

💻 📖

陈有余

💻 📖

yangyang

💻

wan

💻

bujie

💻

Kc

💻

gongpengyang

💻

qixu

💻

waynesonic

💻

paozhuanyinyu

💻

alzzzz

💻 📖

xiangwc

💻

WangYk

💻

SunWei

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

👏🏻 支持

Star&Fork 是对我们最大的支持~

Stargazers repo roster for @wuba/fair

Forkers repo roster for @wuba/fair

📎相关介绍

🔧一起共建

通过Issue提交问题,贡献代码走Pull Request,管理员将对代码进行审核。

对Fair感兴趣的小伙伴,可以加入交流群。技术咨询、讨论,请移步至Gitter

微信 美事(内部)
wechat meishi

微信入群:请先添加58技术小秘书为好友,备注fair,小秘书邀请进群。

⚠️暂不支持功能

由于dart语法解析工作量奇大,会有部分语法和特殊使用方式的限制。 下面是一些,不支持特性&已知问题:

  • 链式点语法,如:Colors.black.withOpacity(0.59),Colors.xxx本身是支持的,但是再次转换透明的则不支持
  • 类的继承不支持 查阅更多不支持内容,请移步至Gitter

🧯FAQ

自查步骤(新手必读)

  1. 核对flutter版本与readme说明,确认该版本已被Fair支持
  2. 核查version分支版本于flutter一致,且等同于第一步版本号
  3. 如果尚未看过文档,请先运行自带的sample,能跑起来再接入app
  4. 遇到编译错误,请查看终端日志,过滤fair关键词
  5. 使用动态化组件的过程中,不建议格式化生成的Javascript文件,格式化工具可能会修改文件内容,导致执行报错
  6. 到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文件权限问题,请删除后重试

LICENSE

Fair项目基于BSD协议开源。我们使用的更多依赖库详见pubspec.yaml

感谢UXD的Kaibin老师提供设计支持