Flutter多引擎路由开发实践一引言背景Flutter多引擎模式允许在一个应用中同时运行多个Flutter

在Flutter跨平台开发中,难免会遇到Flutter和原生交互的问题,特别是Flutter和原生页面切换问题。在单引擎方案中(常见的如咸鱼的FlutterBoost),管理Flutter与原生页面之间的路由可能会比较复杂,特别是在需要在原生和Flutter页面之间频繁切换的情况下。多引擎方案允许为不同的页面或模块创建独立的引擎,使得路由管理更为直观和灵活。

在跨平台应用中,可能会有多个独立开发的模块,它们各自有自己的状态管理需求。通过多引擎模式,每个模块可以运行在独立的Flutter引擎上,确保它们之间的状态不会互相干扰。此外,某些大型应用可能需要将不同的功能模块分开处理,以实现更好的模块化和独立性,这时多引擎模式也是一个理想的解决方案。

多引擎路由方案是为了解决如何在多个Flutter引擎之间高效地管理页面导航和状态的问题。随着应用复杂性的增加,传统的单引擎路由方式可能无法满足需求,比如在独立的模块间实现无缝导航等。因此,设计一个合适的多引擎路由方案,可以帮助开发者更好地管理应用的整体结构,并提升用户体验。

在设计Flutter多引擎页面路由方案时,主要的目标和解决的问题包括以下几个方面:

Flutter多引擎模式是一种在应用中同时使用多个Flutter引擎的架构方案,允许在一个应用中同时运行多个Flutter引擎实例。每个引擎实例可以独立管理其各自的路由、页面和状态,彼此之间互不干扰。这种模式在复杂应用中,特别是需要在Flutter页面和原生页面之间频繁切换时,提供了更大的灵活性。

Flutter提供了一套完整的路由机制来管理页面导航,主要包括Navigator和Route这两个核心概念。

Navigator:

Route:

管理页面路由:

在单引擎的情况下,原生页面和Flutter页面之间的路由跳转会遇到以下挑战:

状态管理的复杂性:

动画和体验不一致:

深度链接和全局导航的处理:

性能问题:

通过回顾这些问题,我们可以更清晰地理解为什么在复杂应用中需要引入多引擎模式,以及多引擎页面路由方案所要解决的核心问题。

一致性和同步问题

性能问题

状态的生命周期管理

安全性问题

使用平台通道(PlatformChannels):

通过共享存储(SharedStorage):

引入中间件或事件总线(EventBus):

在多引擎模式下,不同的引擎可能负责不同的功能模块,这样的设计虽然能够有效地隔离模块、提升性能,但是在管理路由时,会带来一定的复杂性。

在多引擎模式下,确保路由一致性需要综合考虑不同的同步机制和设计模式。通过统一的路由管理服务、原生平台的中介作用、共享的路由栈或者事件总线,能够有效地管理多个引擎之间的路由状态同步,从而提升应用的可靠性和用户体验。

在多引擎模式下,资源管理变得尤为重要,因为每个引擎独立运行,可能导致资源的重复加载和浪费。要在这种情况下高效地管理资源,需要采取一系列措施,确保资源的合理使用与优化。

建立一个共享的资源管理层,用于管理各个引擎之间的资源访问与分配。这个层可以作为一个全局服务,通过依赖注入或单例模式进行共享。

实现思路:

在多引擎模式下,多个引擎可能会同时发起网络请求。为了避免重复请求和网络连接浪费,建议建立统一的网络连接管理机制。

在多引擎模式下,高效的资源管理至关重要。通过共享资源管理层、统一的网络连接管理、资源复用与懒加载、引擎生命周期管理以及异步任务与后台处理等方法,可以有效减少资源浪费,提升应用性能和用户体验。针对具体的应用需求,可以灵活组合以上策略,确保资源的高效使用。

资源复用与懒加载是有效的资源管理策略,特别是在多引擎模式下。可以通过懒加载减少初始资源消耗,通过资源复用避免重复加载。

管理各个引擎的生命周期,合理地分配和释放资源。未使用的引擎应该及时销毁或休眠,以释放资源。

对于耗时的资源操作,可以采用异步任务或后台处理,避免阻塞主线程,提升应用的整体性能。

在使用多引擎替代单引擎时,确实需要特别注意一些第三方库和插件的兼容性问题。以下是一些关键点和注意事项:

问题:在多引擎环境中,每个引擎都可能需要独立的Channel实例。这意味着原生与Flutter的通信通道需要在每个引擎之间正确管理。

注意事项:

问题:某些第三方库可能假设只有一个Flutter引擎在运行,这可能导致在多引擎环境下出现状态同步或管理问题。

问题:在多引擎环境中,多个引擎之间的资源(如GPU上下文、字体资源等)需要有效共享,以避免不必要的内存开销和性能问题。

问题:一些插件可能依赖于单引擎的特性或行为,在多引擎环境下可能不兼容或表现异常。

在多引擎环境中遇到第三方库不支持的情况时,可以通过以下两种主要解决方案来解决这些问题:

通过本地化第三方库和自行实现替代插件,能够有效应对多引擎环境中第三方库不兼容的问题。这些解决方案可以确保项目在复杂环境中的稳定性和兼容性,同时提升系统的性能和可靠性。实施这些策略时,务必进行充分的测试和验证,以确保所有修改和插件都能符合项目的需求和标准。

在设计多引擎路由方案时,需要遵循以下核心原则:

以下提供方案的总体架构图,展示插件的各个层级和模块的基本构成。

Flutter层:

Channel层:

Native层:

如何在Flutter应用中初始化多个引擎,并且如何管理它们的生命周期?

在Android和iOS上添加多个Flutter实例的主要API基于新的FlutterEngineGroup类(AndroidAPI,iOSAPI)来构建FlutterEngines,而不是以前使用的FlutterEngine构造器。

尽管FlutterEngineAPI是直接的且更容易使用,但从相同的FlutterEngineGroup中产生的FlutterEngine具有性能优势,可以共享许多常见的、可重复使用的资源,例如GPU上下文、字体度量和隔离组快照,从而实现更快的初始渲染延迟和更低的内存占用。

从FlutterEngineGroup中产生的FlutterEngines可以像通常构建的缓存FlutterEngines一样连接到UI类,如FlutterActivity或FlutterViewController。

从FlutterEngineGroup创建的第一个FlutterEngine不需要继续存在,只要至少有一个FlutterEngine存活,后续的FlutterEngines仍可以共享资源。

从FlutterEngineGroup创建第一个FlutterEngine的性能特性与以前使用构造器构建FlutterEngine相同。

当FlutterEngineGroup中的所有FlutterEngines都被销毁后,下一次创建的FlutterEngine具有与第一次引擎相同的性能特性。

FlutterEngineGroup本身不需要在所有生成的引擎之后继续存在。销毁FlutterEngineGroup不会影响现有的生成引擎,但会移除生成其他共享资源的FlutterEngines的能力。

代码示例(以iOS为例):

在多引擎模式下,不同的引擎可能负责不同的功能模块,这样的设计虽然能够有效地隔离模块、提升性能,但是在管理全局路由时,会带来一定的复杂性。为了确保全局路由的一致性,需要有专门的路由管理机制。

Flutter和Native各自维护各自的路由栈,提供全局接口,通过MethodChannel可以动态获取当前整个应用的路由栈,;利用这个全局路由栈可以使得原生也能像纯Flutter页面跳转一样实现pushReplacementNamed、pushNamedAndRemoveUntil、popUntil等操作,保证跳转方法的一致性;

导航栈结构示例:

FlutterContainer在原生对应的是iOS-FlutterViewController,Android-FlutterActivity;

NativeContainer在原生对应的是iOS-UIViewViewController,Android-Activity;

示例中的导航栈:FlutterPage1->...->FlutterPage5->NativeContainerB->FlutterPage6->...->FlutterPage8->FlutterPage9->...->FlutterPage12->NativeContainerE

在页面的导航过程中也是按着这个顺序push和pop操作,原生和Flutter的Navigator相互配合,在适当的时机切换页面。

push跳转逻辑示例:

为了使得各个Flutter引擎以及Flutter与原生之间都能够共享缓存,缓存的实际存储应放置在原生端。需要共享的状态会被写入同一个共享缓存中,各个引擎通过各自的Channel与原生端通信,从而实现状态的存取和同步。这样不仅能够确保状态的统一管理,还可以避免因多个引擎独立运行而带来的数据不一致问题。

如图所示缓存在原生端实现,每个引擎都有对应的Channel和原生进行通信,通过Channel存取共享状态。

业务端还可以结合Provider框架,通过注入ChangeNotifier来实现Widget的状态同步。Provider能够简化状态管理,使得跨引擎和跨平台的状态同步变得更加直观和高效,同时确保UI在状态变化时能够保持一致性和实时性。

为多引擎路由方案测试时,你需要考虑如何模拟多引擎场景、如何测试路由逻辑的正确性、以及如何确保各个引擎之间的状态一致性。

使用Flutter多引擎方案有以下几个主要优点:

随着多引擎应用场景的拓展和技术的不断发展,未来的优化方向和扩展功能将更加注重性能提升、兼容性扩展、开发者体验优化。通过这些优化措施,多引擎页面路由方案将更加成熟,能够更好地满足复杂应用的需求,并为业务提供更稳定的保障。

THE END
1.精品设计方案模板10篇【精品】设计方案模板10篇 为了确保事情或工作得以顺利进行,常常需要预先制定方案,方案是从目的、要求、方式、方法、进度等方面进行安排的书面计划。那么应当如何制定方案呢?下面是小编整理的设计方案,欢迎阅读,希望大家能够喜欢。 设计方案 1 一、项目名称 https://www.ruiwen.com/shejifangan/5053130.html
2.设计方案10篇[推荐]设计方案10篇[推荐] 为了确保工作或事情能有条不紊地开展,常常需要提前制定一份优秀的方案,方案是解决一个问题或者一项工程,一个课题的详细过程。那么优秀的方案是什么样的呢?下面是小编精心整理的设计方案10篇,仅供参考,大家一起来看看吧。 设计方案 篇1 https://www.oh100.com/a/202401/7606171.html
3.精选设计方案集锦5篇为保证事情或工作高起点、高质量、高水平开展,常常需要提前进行细致的方案准备工作,方案是阐明具体行动的时间,地点,目的,预期效果,预算及方法等的企划案。你知道什么样的方案才能切实地帮助到我们吗?下面是小编整理的设计方案5篇,仅供参考,欢迎大家阅读。 https://www.wenshubang.com/fangan/3598469.html
4.思政素材库一体化建设方案课程思政教学案例2、 典型参考案例 l 在体系顶层设计方面 湖南中医药大学信息科学与工程学院为算法分析与设计课程思政教学研发了课程思政教学素材管理,该系统基于 B/S(Browser/Server,浏览器/服务器) 架构,包括系统管理员和教师两类用户。系统核心功能包括 素材上传、素材查询、素材查看、素材下载、素材审核、素材统计和素材评论等,实现https://cs.neusoft.edu.cn/2022_07/25_10/content-29223.html
5.房地产营销策划方案房地产策划参考案例→MAIGOO知识地产策划案例 前言 ××商业城座落于××市城区南部的××广场旁,是××地产开发公司的新建项目。本项目占地8000平方米,根据目前的建筑设计建议方案,项目由三层裙楼(含负一层)和两栋塔楼(分别高四层)组成,总建筑面积约为15 000余平方米,地下车库及设备用房建筑面积为1500多平方米,商业裙楼建筑面积约8500平方米,https://www.maigoo.com/goomai/182488.html
6.新课程中学英语教学设计专项方案与案例分析部分参考答案.doc新课程中学英语教学设计专项方案与案例分析部分参考答案.doc 18页VIP内容提供方:159***9606 大小:44.5 KB 字数:约1.1万字 发布时间:2021-03-21发布于江苏 浏览人气:107 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)新https://max.book118.com/html/2021/0320/8063017123003062.shtm
7.设计方案高清效果图作品方案装修设计方案下载本栏提供:室内装修设计方案参考与下载,装修设计案例,实景案例,高清效果图方案,优秀作品集,名师资料集免费下载http://www.tzsucai.com/shejifangan.html
8.近万字干货!B端产品增长设计通用模式(附超多案例)优设网行业案例:软件开发与办公协作领域的头牌公司 Atlassian 的设计师曾经通过测试和优化迭代循环的方式来找出合适的设计方案。下图展示了他们测试新旧模态弹窗用户辨识度的数据,结果显示,新版的图文结合的方式反而容易让用户感到困惑。 经过测试结果分析,设计师们认为可能是弹窗底部大块的文字让用户难以快速抓住核心信息,因此他们https://www.uisdc.com/b-end-product-growth-design
9.iOS7第三方应用重设计的解决方案及案例参考人人都是产品经理iOS 7第三方应用重设计的解决方案及案例参考 乍看上去,“为iOS7重设计”无非就是新的应用图标、无边框按钮、与导航栏配色相匹配的状态栏等等。不过如果你再深入挖掘一些,便会发现很多耀眼的地方都体现着iOS7的三大设计主题,即“依从、清晰、纵深”。 对于某些应用来说,这些改变带来了设计上的极大改善,而另外一些则https://www.woshipm.com/pd/45963.html
10.2018级老年服务与管理专业人才培养方案初始岗位群:各级各类养老及涉老机构的养老护理员及基层管理者、社区服务与管理员、老年产品及老年产业营销员、涉老社会组织与机构工作人员、民政事务管理人员等。 发展岗位群:在各级各类养老机构、社区服务与管理组织、涉老社会组织与机构等从事养老护理员培训、老年照护管理、老年健康管理、老年社会工作、老年康复辅助器https://jwc.wfhlxy.com/info/1023/1358.htm
11.高等级公路中互通式立体交叉设计参考文献摘要 为了全面提升公路运行质量,分析节点型工程-互通式立体交叉的功能定位、设计要点,确保道路设计的合理性,为交通转换予以保障,促进区域经济的可持续发展。文章分析高等级公路中互通式立体交叉设计的重点、难点,以广东某高速公路为例,提出“半直连T形+A形单喇叭”和“混合式十字形枢纽”两种互通立交方案并进行http://html.journal.founderss.cn/ggwh/14466/268305/?showGoogle=0&showBaidu=1
12.工商管理案例分析论文(精选12篇)为实现知识转换能够在案例教学中体现出来,还需要做好以下设计:首先,布置案例。在这一过程中就是要求教师能够联系学生实际情况设置好学习任务,确定好学习目标。其次,让学生认真学习教学案例,并以个人形式做好案例相关信息收集,要求学生能够根据案例提出属于自己的观点与想法。再者,重视小组讨论,也就是让学生将自己的观点https://bylw.yjbys.com/gongshangguanli/106137.html
13.ABB码垛算法程序与设计接口参考案例abb成套设计csdnABB码垛算法程序与设计接口参考案例 一、前言 (1)本案例提一般码垛包常用解决方案,根据不同产品尺寸(长宽高)、托盘固定尺寸(10001000150)等(产品类型与计划数量)等采用整除和取余计算出堆垛位置数据计算方式 (2)使用POS{X,Y,Z}数据类型对位置数据进行补偿,避免因场地有规律的倾斜问题https://blog.csdn.net/fenglingxicao/article/details/113621958
14.蒸汽管道设计图纸,蒸汽管道图纸参考精选管道管件图块集蒸汽管道设计图纸,蒸汽管道图纸参考属于土木在线精选管道管件图块集分类,精选管道管件图块集包含大量与精选管道管件图块集相关图纸,提供给网友免费下载,更多精选管道管件图块集相关图纸请访问土木在线。https://ziliao.co188.com/d62558682.html