其他分享
首页 > 其他分享> > 大厂 Flutter 动态化技术方案调研

大厂 Flutter 动态化技术方案调研

作者:互联网

本文地址


目录

目录

大厂 Flutter 动态化技术方案调研

动态化技术简介

动态化即不依赖程序安装包,就能进行动态实时更新页面的技术。

常用的实现方式:

动态化架构对比

image.png

image.png

动态化方案简介

阿里 Kraken

Kraken 是阿里开源的一款基于 W3C 标准的高性能渲染引擎。也是目前几个大厂框架内维护力度最高的库。

Kraken 的优势在于其能够基于 W3C 进行开发,而且引入 npm 生态,支持使用 Vue、React 框架开发,一般前端人员都能进行开发,学习成本很低。

使用介绍

pubspec 引入,然后直接使用 Widget Kraken 传入脚本的 url 就可以了。

Widget build(BuildContext context) {
  Kraken kraken = Kraken(bundleURL: 'http://xxx.js'); // 我们只需要维护js脚本就可以了
  return Scaffold(
    appBar: PreferredSize(),
    body: kraken, // 动态化的内容
  );
}

可以看到,重点在于我们如何去维护带有动态运营内容的 js 文件,这是 Kraken 相对于其他框架最有竞争力的点。

Kraken的缺点是不支持 css 样式,使 Vue 开发的体验也相对一般。但总体而言已经很不错了,官方维护力度大,满足前端生态,使用方便,是动态化技术很不错的选择。

58 Flutter Fair

Fair:Flutter over the air

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

创建 Fair 的目标是支持不发版的情况下,通过业务 bundle 和 JS 下发实现更新,方式类似于 React Native。Fair 提供了标准的 Widget,它可以被用作一个新的动态页面或作为现有 Flutter 页面的一部分。

使用介绍

动态化需求无非就是把 JSON 配置文件放到线上,然后 FairWidget 每次都会重新拉取下来展示,从而实现动态化。

return Container(
    alignment: Alignment.centerLeft,
    color: Colors.white,
    constraints: BoxConstraints(minHeight: 80),
    child: FairWidget(
      name: item.id,
      path: 'assets/bundle/sample.json',
      data: {"fairProps": json.encode({'detail': details})}, /// 拉取 json
    ),
);

/// 解析 json,json 配置文件按照官方协议写就可以了
Map map = await decode.decode(data, isFlexBuffer);

相关的依赖其实都是非常旧的了,很明显维护力度不够;同时对Flutter版本也有限制,Flutter每出一个版本,58Fair官方就很可能需要做一次适配。

利弊分析

腾讯 MxFlutter

MXFlutter 是一套使用 TypeScript/JavaScript 来开发 Flutter 应用的框架。

框架支持两种开发方式

设计思路

把 Flutter 的渲染逻辑中的三棵树(即:WidgetTree、Element、RenderObject)中的 WidgetTree,放到 JavaScript 中生成。用 JavaScript 完整实现了 Flutter 控件层封装,实现了轻量的响应式 UI 框架,支撑 JS WidgetTree 的 build 逻辑,build 过程生成的 UI 描述, 通过 Flutter 层的 UI 引擎转换成真正的 Flutter 控件显示出来。

架构

使用介绍

通过 MXJSPageWidget 传入 js 脚本,就能解析出来显示了。一般使用 MxFlutter 都是展示一整个使用 MXFlutter 框架编写的页面。

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => MXJSPageWidget(
        jsWidgetName: "mxflutter-ts-demo",
        flutterPushParams: {
          "widgetName": "WidgetExamplesPage"
        }),
  ),
);

MxFlutter 同样也是维护力度有限。

2022-7-31

标签:框架,Fair,Kraken,MXFlutter,大厂,Flutter,动态化
来源: https://www.cnblogs.com/baiqiantao/p/16538158.html