Flutter 动态化 | Fair 2.6.0 新版本特性

Fair新版本特性—2.6.0

更新时间:2022.07.05

版本特性

1.Fair 支持加载手机磁盘路径上的 bundle 文件;

FairWidget(
  path: \'手机磁盘路径/xxx.fair.json\',
)

2.适配 Flutter SDK 2.10.0、2.10.1、2.10.2、2.10.3 版本;

3.Dart2JS 支持解析 static 方法;

4.运行时,页面错误信息提示优化;

当 Fair 在运行期间,出现错误时,会有如下提示:

点击错误图标,可以显示错误日志:

5.语法糖支持解析 Model 数据。

使用方式:

Step1:定义模型数据:

import \'package:fair/src/render/base_model.dart\';

class Person implements BaseModel{}

需要实现 toJson,添加一个 from 方法

Step2:注册模型

  • 定义一个 GeneratedModule
class TestGeneratedModule implements GeneratedModule
  • 在其中注册模型

  • 把定义的 GeneratedModule 传入到 FairApp 初始化的 generated:参数

Step3:模型使用,以 Sugar.mapEach 为例:

  • Sugar.mapEach([Person(name: "kk",age: 18, wei: 99)], (index, Person item) {}

  • 需要指定 item 的类型才能用 item.name 来使用其模型数据

  • 支持直接调用或者将其在字符串中 Text(item.name),Text("${item.age}"),

贡献者

近期规划

  • 扩充及优化语法糖
  • 添加更详尽的新手入门教程

Fair实验室

热更新平台

动态化方案离不开热更新平台,我们规划在近期会推出以Flutter和Dart Server为主的热更新平台,实现开发者0成本接入Fair热更能力。

线上动态化

我们也将尝试使用low code的形式,以在线化工具为基础,进行线上的Fair动态化编辑,提升整体开发效率。


Fair简介

social

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

创建Fair的目标是支持不发版(Android、iOS、Web)的情况下,通过业务bundle和JS下发实现更新,方式类似于React Native。与Flutter Fair集成后,您可以快速发布新的页面,而无需等待应用的下一个发布日期。Fair提供了标准的Widget,它可以被用作一个新的动态页面或作为现有Flutter页面的一部分,诸如运营位的排版/样式修改,整页面替换,局部替换等都可以使用。

Fair 分层架构

Fair 架构由2部分组成,1为同Kraken和MXFlutter的App运行环境,2为Fair Compiler把Dart源文件编译成DSL和JS动态产物的工具。结构如下: image Fair 框架中Widget构建、数据绑定以及基本的逻辑(if、List Map…)处理都在Dart域完成,留给JS侧的只有基本数据类型、运算和方法调用处理。

快速接入

1. 添加依赖

推荐将 fair 下载到本地,通过 path 相对路径进行依赖。假设 fair 项目和您自己的项目位于同一个文件夹下面:

# add Fair dependency
dependencies:
  fair: 2.6.0

# add compiler dependency
dev_dependencies:
  build_runner: ^2.0.0
  fair_compiler:
    path: ../fair/compiler
 
# switch "fair_version" according to the local Flutter SDK version
dependency_overrides:
  fair_version: 2.0.6+1

通过切换 flutter_version 版本进行版本兼容。例如,将本机切换为 flutter 2.0.6 后,Fair 需要同步切换

# switch to another stable flutter version
dependency_overrides:
  fair_version:
    path: ../fair/flutter_version/flutter_2_0_6

2. 使用 Fair

常见做法是作为 App 的根节点,如果不是全局采用也可以作为子页面的根节点

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({})}),
  ),
);

每一个动态组件由一个FairWidget表示。

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

Fair资料

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预览

支持我们

欢迎大家使用 Fair,也欢迎大家为我们点亮star

Github地址:fair.58.com
Fair官网:fair.58.com

欢迎贡献

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

猜你喜欢

转载自juejin.im/post/7125262067795230751