Flutter实现动态化更新-技术预研

  1. webview增强 【植入腾讯 X5内核,模型升级改造】

  2. UI库模板化

各大厂动态化架构对比


Flutter Fair


Fair是“58同城”为Flutter设计的动态化框架,通过Fair Compiler工具实现JSON配置和原生Dart源文件的自动转化,从而动态更新Widget Tree和State。

使用介绍

官方并没有维护pub上的Fair插件,我们需要去GitHub fork源码下来编写demo。58Fair

准备一份配置好的JSON文件,然后直接调用FairWidget传入文件路径即可显示,非常简单。动态化需求无非就是把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})},

),

);

继续跟进源码,可以看到当我们传入的文件路径是以http开头的时候,会通过网络进行拉取

void _reload() {

var name = state2key;

var path = widget.path ?? _fairApp.pathOfBundle(widget.name);

bundleType = widget.path != null && widget.path.startsWith(‘http’)

? ‘Http’
‘Asset’;

parse(context, page: name, url: path, data: widget.data).then((value) {

if (mounted && value != null) {

setState(() => _child = value);

}

});

}

/// 再通过parse()方法逐层进入decoder → bundle_provider,查看onLoad方法

@override

Future onLoad(String path, FairDecoder decoder,

{bool cache = true, Map<String, String> h}) {

bool isFlexBuffer;

if (path.endsWith(FLEX)) {

isFlexBuffer = true;

} else if (path.endsWith(JSON)) {

isFlexBuffer = false;

} else {

throw ArgumentError(

‘unknown format, please use either $JSON or $FLEX;\n $path’);

}

if (path.startsWith(‘http’)) {

return _http(path, isFlexBuffer, headers: h, decode: decoder);

}

return _asset(path, isFlexBuffer, cache: cache, decode: decoder);

}

/// 重点查看以http开头的解析方法,用的是http库拉取

Future _http(String url, bool isFlexBuffer,

{Map<String, String> headers, FairDecoder decode}) async {

var start = DateTime.now().millisecondsSinceEpoch;

var response = await client.get(url, headers: headers);

var end = DateTime.now().millisecondsSinceEpoch;

if (response.statusCode !&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值