您的浏览器版本过低,为保证更佳的浏览体验,请点击更新高版本浏览器

以后再说X

欢迎访问pg电子娱乐平台(试玩游戏)官方网站·电子游戏/试玩平台

图片名

全国订购热线:
020-15588349632

主页 > 资讯公告 > 公司新闻

公司新闻

pg棋牌软件平台 Flutter Boost3.0初探

作者:佚名 发布时间:2024-05-02 01:07:33 次浏览

pg棋牌软件平台 Flutter Boost3.0初探文章浏览阅读715次。背景随着Flutter的发展,国内越来越多的App开始使用Flutter。为了降低风险,大部分App采用渐进式方式引入Flutter

背景

随着Flutter的发展,越来越多的国内应用开始使用Flutter。 为了降低风险,大多数应用程序都采用渐进的方式引入Flutter,并选择应用程序中的少数页面使用Flutter编写。 然而pg棋牌软件平台,他们都遇到了同样的问题。 原生页面和Flutter页面共存时如何管理路由? 官方并没有提供这样的解决方案,FlutterBoost就是为了解决这个问题而诞生的。 FlutterBoost 自开源以来就受到了社区开发者的欢迎。 许多应用程序都使用了 FlutterBoost。 社区开发者也非常活跃,提交了很多 issues 和 PR。 感谢开发者们一路来的支持和包容。 无论是反馈还是投诉,我们都会认真对待并持续关注该Issue。

使命

FlutterBoost 的使命是让开发者在原生应用中开发 Flutter 页面变得非常简单。 FlutterBoost作为Flutter SDK的上层解决方案pg棋牌软件平台,有一定的局限性。 我们需要依赖SDK更多的开放能力。 所以我们同时做两件事:

我们参与了Flutter组织的Multiple Flutters[1]的讨论。 我还向 Flutter 团队发送了多封电子邮件,报告 SDK 中的 bug 以及一些不支持的应用场景。 很高兴看到Flutter 2.0在混合开发方面取得了重大进展。 Flutter 2.0 提供了 FlutterEngineGroup。 FlutterEngineGroup 创建了一个新的 Engine,仅增加了 180k 的内存。 这给我们提供了很大的想象空间。 但 FlutterEngineGroup 最大的问题是多个引擎之间没有隔离级别的内存共享。 从目前来看,FlutterBoost的单Engine内存共享方式还无法完全替代。

尽管开源社区非常活跃,明星众多、用户众多,但 FlutterBoost 距离一个优秀的开源项目还很远。

FlutterBoost 的问题

我们来梳理一下问题:

这些问题促使我们重新梳理设计。 为了彻底解决这些顽固问题,我们进行了重大升级。 我们将本次升级命名为 FlutterBoost 3.0(上次升级为 2.0)

FlutterBoost3.0 做什么

针对以上问题,我们做了几件事

架构图

FlutterBoost插件分为平台和Dart两端,通过Message Channel连接。 平台侧提供Flutter引擎的配置和管理、Native容器的创建/销毁、页面可见性变化通知、Flutter页面的打开/关闭界面等。此外还提供类似的页面导航界面原生Navigator,Dart端还负责Flutter页面的路由管理。

没有黑客攻击引擎

为了解决复用官方引擎带来的问题,FlutterBoost 2.0对Flutter引擎的Embedding层的部分代码进行了复制和改造,这使得后期的升级成本极高。FlutterBoost3.0使用继承来扩展

FlutterActivity/FlutterFragment等组件的能力,并通过在适当的时候向Dart端发送appIsResumed消息,解决引擎复用时生命周期事件混乱导致的页面卡顿问题。 FlutterBoost3.0还兼容官方最新发布的Flutter 2.0。

不区分 Androidx 和 Support 分支

FlutterBoost2.0自己实现

FlutterActivityAndFragmentDelegate.Host接口扩展了FlutterActivity和FlutterFragment的能力,而getLifecycle是必须实现的接口,这就导致了对androidx的依赖。 这也是为什么FlutterBoostView的实现没有被放入FlutterBoost3.0插件中的原因。 FlutterBoost3.0能够通过继承扩展FlutterActivity/FlutterFragment的额外好处是可以独立于androidx。

统一双端设计,统一接口

很多Flutter开发者只知道一端,Android或者IOS免费pg电子游戏,但是他们需要接入两端,所以统一两端可以降低他们的学习成本和接入成本。 FlutterBoost3.0在设计上就实现了Android和IOS的一致,尤其是接口在参数层面进行了一致。

支持“不打开容器打开flutter页面”的场景

很多场景下,Flutter页面跳转到Flutter页面,此时是不需要打开容器的。 不打开容器可以节省内存开销。 在 FlutterBoost 3.0 上,打开容器和不打开容器的区别仅通过 withContainer 参数是否为 true 体现在用户界面上。 代码如下所示:

InkWell(
child: Container(
color: Colors.yellow,
child: Text(
'打开外部路由',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap:  => BoostNavigator.of.push("flutterPage",
arguments: {'from': widget.uniqueId}),
),
InkWell(
child: Container(
color: Colors.yellow,
child: Text(
'打开内部路由',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap:  => BoostNavigator.of.push("flutterPage",
withContainer: true,
arguments: {'from': widget.uniqueId}),
)

生命周期准确通知

在 FlutterBoost 2.0 上,每个页面都会收到页面生命周期通知,而 FlutterBoost 3.0 只会通知页面可见性实际发生变化的页面,界面更符合 Flutter 的设计。

热门问题解决方案

对反馈较多的问题进行了收集和分类,主要解决了以下问题:

FlutterBoost3.0接入及使用接入方法

flutter_boost:
git:
url: 'https://github.com/alibaba/flutter_boost.git'
ref: 'v3.0-beta.3'

目前,FlutterBoost 3.0已经发布了beta版本,目前正处于公测阶段。

接口文档

请查看详情

Flutter2.0新特性FlutterEngineGroup

FlutterBoost采用单Engine方案,因此整个App都在同一个Isolate下,共享内存,而FlutterEngineGroup采用多Engine方案。 每个Page都是一个Engine,或者一个Page包含多个Engine,每个Engine对应一个Isolate,内存不共享。 FlutterEngine由FlutterEngineGroup生成,内存仅增加180k。 由于它共享常用资源(例如 GPU 上下文、字体指标和独立线程的快照),因此可以加快首次渲染速度、减少延迟并减少内存占用。

这是否意味着有了 FlutterEngineGroup,就不再需要 FlutterBoost 了? 从目前来看,FlutterBoost的单Engine方案具有一定的合理性,并不能完全替代。

FlutterBoost的未来发展

未来我们将继续做这三件事:

参考

[1]多次颤振:

图片名 客服