一款零侵入的高效Flutter混合栈管理方案,你值得拥有!

在实际的工作场景中,我们很难从零开始用纯Flutter去建设一个项目,也正是因为这样,Native+Flutter混合栈跳转管理使我们在混合开发的时候不得不首先考虑的问题,因为我们很难保证不会遇到下面的情况。

那么如何做技术选型困惑了不少想要做混开的同学,毕竟Flutter的生态还不是十分成熟,现成的解决方案和轮子并不多,而且还不一定好用,要么资源占用过高,要么侵入性太强。好在经过这几天的摸索,总结出来了一套方案,供大家学习参考,相互交流。


按照国际惯例,我先介绍一下目前市场上的一些解决方案以及存在的问题。

本文章基于Flutter版本:2.2 & Platform:Android

1.Google官方(多引擎方案)

即每次使用一个新的FlutterEngine来渲染Widget树。虽然Flutter 2.0之后的创建FlutterEngine的开销大大降低,但是依然没有解决每个FlutterEngine是一个单独isolate,如果需要Flutter①和Flutter②之间交互数据的话,将会非常麻烦。我们同样无法保证他们之间不会进行数据交互,因此Pass。

2.大名鼎鼎的闲鱼flutter_boost(单引擎方案)

flutter_boost最近发布了3.0的bate版本,摒弃了2.0版本对引擎的侵入(赞!),但是依然存在不少问题:

①:高居不下的未关闭issues与回复不及时之间的矛盾(可以理解,竟然还是有工作要做的)。

②:复杂的设计,在出现使用问题的时候,通过改flutter_boost源码解决的成本很高。

③:flutter方面耦合度较高,我必须使用flutter_boost提供的一系列Route相关的工具和Widget才能达到混合栈跳转的效果,如果我以后想要更换框架,那对代码的修改将是海量的。

于是乎成功把我劝退。

3.哈喽单车团队的flutter_thrio(单引擎方案)

该库的优劣作者已经说得很详细了,这里就不再赘述,感兴趣的朋友可以进传送门亲自查看。

4.字节跳动团队的Isolate复用方案和腾讯心悦团队的TRouter方案

很可惜,目前这两个方案并没有开源出来,但很可能字节团队的方案的侵入性相当高。


既然没有现成的方案,那就撸起袖子造一个,先来一个混合栈跳转的效果演示:

项目地址:github.com/wangkunhui/…

那么现在开始把上面的功能实现吧。

首先,要确定最终实现的目标,然后一步步朝着目标去完善:

目标一:复用FlutterEngine,避免额外的资源开销与FlutterEngine之间的通信成本。

目标二:Flutter Widget之间的跳转无需通过Native层控制(flutter_boost需要)。

目标三:每个打开的Flutter能且只能管理自己内部的栈,当前Flutter的Widget全部出栈后,退出当前Flutter。

目标四:支持Flutter带参数打开Native页面(返回值也可以支持,但目前还未添加进去)。

根据这些目标设计出来的模型图如下:

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值