CN118051294A - 一种基于Flutter的移动端混合页面的管理方法 - Google Patents
一种基于Flutter的移动端混合页面的管理方法 Download PDFInfo
- Publication number
- CN118051294A CN118051294A CN202410451190.2A CN202410451190A CN118051294A CN 118051294 A CN118051294 A CN 118051294A CN 202410451190 A CN202410451190 A CN 202410451190A CN 118051294 A CN118051294 A CN 118051294A
- Authority
- CN
- China
- Prior art keywords
- flutter
- route
- page
- routing
- stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000007726 management method Methods 0.000 title claims abstract description 22
- 238000000034 method Methods 0.000 claims abstract description 35
- 230000008569 process Effects 0.000 claims abstract description 10
- 238000004891 communication Methods 0.000 claims abstract description 7
- 230000003993 interaction Effects 0.000 claims description 9
- 230000006378 damage Effects 0.000 claims description 8
- 230000008859 change Effects 0.000 claims description 4
- 238000013507 mapping Methods 0.000 claims description 3
- 230000002688 persistence Effects 0.000 claims description 3
- 235000008694 Humulus lupulus Nutrition 0.000 claims 1
- 238000012546 transfer Methods 0.000 abstract description 5
- 230000008447 perception Effects 0.000 abstract description 4
- 238000012423 maintenance Methods 0.000 abstract description 3
- 230000007246 mechanism Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000011112 process operation Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/545—Gui
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及应用管理技术领域,特别地涉及一种基于Flutter的移动端混合页面的管理方法。一种基于Flutter的移动端混合页面的管理方法,包括系统启动时初始化处理;多引擎模式下路由关系维护和通信机制的建立;Flutter页面堆栈实现方式和Flutter页面路由实现方式。本发明通过对混合页面堆栈管理,可以让用户无感知的在不同技术栈的页面自由跳转、参数传递与结果回传,从而对页面场景的切换进行优化,使用户能够有更好的应用使用体验。
Description
技术领域
本申请涉及应用管理技术领域,特别地涉及一种基于Flutter的移动端混合页面的管理方法。
背景技术
科技的进步带来了许多便利,移动设备的普及也对市场有了新的要求,用户对于夸平台的体验一致性愈发强烈,应用研发的过程中也将此作为重要的目标,Flutter作为一个开源的UI框架,能够较好的提供多平台一致性体验,但是一些特定场景依旧无法满足。
后续对于Flutter混合开发,Flutter官方提出了“Add2APP”方案,允许开发者将Flutter模块集成到现有原生应用中,但是并没有解决页面管理及路由问题,对某些业务场景并不能提供很好的支持。
发明内容
针对上述问题,本申请提供一种基于Flutter的移动端混合页面的管理方法,通过对混合页面堆栈管理,可以让用户无感知的在不同技术栈的页面自由跳转、参数传递与结果回传,从而对页面场景的切换进行优化,使用户能够有更好的应用使用体验。
本申请的技术方案为:一种基于Flutter的移动端混合页面的管理方法,包括:
S1、接收应用启动信号后,系统在执行配置的EntryPoint入口预热一个Flutter引擎,在Flutter内创建一个Flutter容器实例和一个Widget结构的路由栈,路由栈中包含多个Navigator路由,且路由栈能够维护当前引擎内所有的原生容器所对应的Flutter堆栈,保持原生容器与Navigator路由一一对应;
S2、接收应用页面交互的信号后,在单引擎模式下,进行跨原生页面的Flutter页面跳转切换,将执行Flutter引擎与Flutter容器的依附与分离操作,完成应用页面交互;
其中对Flutter引擎与Flutter容器Flutter容器的依附和分离操作为:
依附操作,创建Flutter视图并添加到原生界面中;将创建的Flutter视图与Flutter引擎一一关联,随后完成Flutter引擎就会附加到Flutter视图上,进而完成原生应用中嵌入Flutter视图;
分离操作,在原生应用退出或者不需要嵌入的Flutter视图的时候,断开Flutter视图与Flutter引擎的关联,并且销毁Flutter容器。
作为优选地,步骤S1中在Flutter内创建一个Flutter容器实例和一个Widget结构的路由栈”之后,还包括对Flutter界面的判断,具体步骤为:
Flutter框架在创建应用程序时会根据应用的配置设置默认的首页或根路由,应用默认以Flutter页面作为应用首个页面,自动判断路由导航到根路由配置的Flutter页面,并通过Navigator路由负责管理页面的堆栈,无需开发者介入;
如果在Flutter应用中Flutter页面不是根路由页面,则需要开发者手动导航至非根路由页面或者修改根页面,从而满足不同的导航需求。
作为优选地,步骤S2中接收应用页面交互的信号后,还包括有多引擎模式下对路由关系的维护,具体步骤为:
路由跳转时提供可选Flutter引擎,当未指定Flutter引擎时,将优先从当前引擎路由查找,失败则从全局查找,其中Flutter引擎由Flutter引擎组创建,不同的Flutter引擎的编号分别记为αn,n=1,2,3······N,N为创建的Flutter引擎的总数量,且每个Flutter引擎αn对应唯一一个引擎βn,引擎βn为Flutter引擎αn对应的路径,每个Flutter引擎αn对应数个Flutter容器,γm为Flutter容器对应的路径,m=1,2,3······M,M为Flutter容器的总数量,构建从Flutter引擎到每一个Flutter容器的路径IDm=αn+βn+γm,通过IDm可全局定位到系统任意的路由页面。
作为优选地,在多引擎模式下对路由关系进行维护时,还包括多引擎模式下的共享通信,具体步骤为:
建立一个共享内存区域,当系统中的任何一个部分进行路由栈数据操作时,这些操作会同步映射到共享内存区域,通过FFI通道在Flutter和原生进程之间共享,Flutter和原生进程通过共享内存区域的地址来访问和操作相同的数据;
所述共享内存区域存储有路由栈数据,还保存应用的全局数据,全局数据包括应用的状态和配置信息,且共享内存区域设置有持久化接口,允许将这些数据永久保存在存储介质中;
并且在debug模式下,由于共享内存区域存储了路由栈数据,因此可以通过共享内存区域的数据来恢复路由栈。
作为优选地,S1中通过路由栈维护当前引擎内所有的原生容器所对应的Flutter堆栈的具体步骤为:
在每个Flutter引擎αn都设置一个路由栈,路由栈δn为路由栈对应的编号,用于管理页面,且其中包含多个Navigator路由实例,构成路由栈-Navigator路由列表,每个Navigator路由都代表一个页面堆栈;接收需要显示的Navigator路由,遍历路由栈-Navigator路由列表,查找对应的路由栈δn,通过改变路由栈δn对应的index来控制当前显示的Navigator路由,并且将已经显示的Navigator路由进行隐藏,从而通过改变路由栈δn的index来对应原生容器的显示和隐藏;
将路由栈δn中多个Navigator路由实例记为子类,建立子类列表,接收原生容器展示信号,在需要展示的地方,建立一个新的Navigator路由,更新路由栈δn对应的子类属性,添加原生容器对应的Navigator路由到子类列表中,完成对原生容器的展示,当接收销毁信号的时候,同样更新路由栈δn对应的子类属性,从子类列表中移除对应的Navigator路由以销毁原生容器;
定义GlobalKey作为Navigator路由的唯一标识key,在创建Navigator路由时将定义的GlobalKey分配给Navigator路由的key属性,根据GlobalKey来获取对应的Navigator路由State,进而执行页面跳转和返回的操作,确保在整个应用程序中,使用GlobalKey时保持其唯一性,以便准确地标识和操作对应的Navigator路由,确保Flutter中的Navigator路由与原生容器之间一一对应。
作为优选地,步骤S2进行跨原生页面的Flutter页面跳转切换时,还包括Flutter页面路由实现的具体步骤为:
创建一个名为MyContainerWidget的自定义小部件,其中包含了一个Navigator路由组件,这个自定义小部件通过Flutter提供的Navigator路由大大简化了页面路由的实现,自定义小部件使用onGenerateRoute方法提供路由工厂配置自动实现路由跳转;ContainerWidget通过监听Navigator路由Observer来记录ContainerWidget路由页面的数量,通过监听页面压栈和出栈操作,动态地追踪页面数量的变化,WidgetsBindingObserver的ChangeMetrics方法被利用来监测页面数量,当页面数量为零时,可以触发对Flutter堆栈和原生容器的销毁。
本申请具有以下优点:
1、本发明通过对混合页面堆栈管理,可以让用户无感知的在不同技术栈的页面自由跳转、参数传递与结果回传,从而对页面场景的切换进行优化,使用户能够有更好的应用使用体验;
2、本发明还包括对Flutter多引擎或多进程运行场景的优化,实现了跨进程、跨引擎的路由管理方案,可支持多个Flutter引擎及不同进程之间的混合页面路由与通信,还针对路由操作、事件通知等场景简化了项目接入以及使用方式。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图;
图1为本申请实施例中的混合页面管理系统组成框图;
图2为本申请实施例中的引擎内容容器对应关系图;
图3为本申请实施例中的单引擎模式路由流程图;
图4为本申请实施例中的多引擎模式引擎与容器关系图;
图5为本申请实施例中的引擎-容器-Flutter堆栈关系图;
图6为本申请实施例中的共享内存机制流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请部分实施例进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。然而,本领域的普通技术人员可以理解,在本申请的各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。
实施例
如图2和图3所示,本申请的技术方案为:一种基于Flutter的移动端混合页面的管理方法,包括:
S1、接收应用启动信号后,系统在执行配置的EntryPoint入口预热一个Flutter引擎,在Flutter内创建一个Flutter容器实例和一个Widget结构的路由栈,路由栈中包含多个Navigator路由,且路由栈用于维护当前引擎内所有的原生容器所对应的Flutter堆栈,原生容器与Navigator路由一一对应;
S2、接收应用页面交互的信号后,在单引擎模式下,实现跨原生页面的Flutter页面跳转切换,将执行Flutter引擎与Flutter容器的依附与分离操作,完成应用页面交互;
其中对Flutter引擎与Flutter容器Flutter容器的依附和分离操作为:
依附操作,创建Flutter视图并添加到原生界面中;将创建的Flutter视图与Flutter引擎一一关联,随后完成Flutter引擎就会附加到Flutter视图上,进而完成原生应用中嵌入Flutter视图;
其中Flutter视图是一个用于承载Flutter引擎渲染内容的视图。它通常是原生应用程序中的一个部分,用于显示由Flutter引擎生成的用户界面。在Flutter的工作原理中,Flutter视图实际上是一个嵌入式视图,负责将Flutter引擎的输出集成到原生应用程序中。
分离操作,在原生应用退出或者不需要嵌入的Flutter视图的时候,断开Flutter视图与Flutter引擎的关联,并且销毁Flutter容器。
如图1所示,本发明主要涉及原生(Android或IOS)、Flutter、H5三部分,主要由Flutter容器管理,容器管理、路由管理、数据总线等模块组成,对于不同模块的功能介绍为:
引擎管理:负责当前应用中的Flutter引擎管理,包括创建、销毁、查找等;容器管理:负责维护管理当前应用中容器,包括Flutter容器、WebView容器、原生容器;生命周期管理:负责实时监控应用及原生容器的生命周期并分发给感兴趣的业务模块;路由管理:负责混合页面堆栈的维护,以及路由跳转、参数传递以及结果回传等操作;数据总线:提供消息注册,分发等数据通信的功能。
其中还包括有对步骤S1中还包括对Flutter界面的判断,具体步骤为:
Flutter框架在创建应用程序时会根据应用的配置设置默认的首页或根路由,应用默认以Flutter页面作为应用首个页面,自动判断路由导航到根路由配置的Flutter页面,并通过Navigator路由负责管理页面的堆栈,无需开发者介入,当应用进入的页面为应用首页,则表示Flutter框架在创建应用程序时,建立了准确的很路由路径,应用页面显示正常;
如果在Flutter应用中Flutter页面不是根路由页面,则需要开发者手动导航至非根路由页面或者修改根页面,从而满足不同的导航需求,需要补充的是,应用在使用的时候,页面出现崩溃的情况,开发者需要手动导航,修复出现显示错误的地方,从而在不同导航要求都能够正常显示。
本发明通过对混合页面堆栈管理,可以让用户无感知的在不同技术栈的页面自由跳转、参数传递与结果回传,从而对页面场景的切换进行优化,使用户能够有更好的应用使用体验。
如图4和图5所示,还包括有多引擎模式下对路由关系的维护,具体步骤为:
路由跳转时提供可选Flutter引擎,当未指定Flutter引擎时,将优先从当前引擎路由查找,失败则从全局查找,其中Flutter引擎由Flutter引擎组创建,不同的Flutter引擎的编号分别记为αn,n=1,2,3······N,N为创建的Flutter引擎的总数量,且每个Flutter引擎αn对应唯一一个引擎βn,引擎βn为Flutter引擎αn对应的路径,每个Flutter引擎αn对应数个Flutter容器,γm为Flutter容器对应的路径,m=1,2,3······M,M为Flutter容器的总数量,构建从Flutter引擎到每一个Flutter容器的路径IDm=αn+βn+γm,通过IDm可全局定位到系统任意的路由页面,从而当需要对任一页面进行定位的时候,直接遍历所有路径IDm,程序能够提取路径IDm内存储的αn+βn+γm,从而准确快速地定位到目标页面。
如图6所示,还包括多引擎模式下的共享通信,具体步骤为:
建立一个共享内存区域,当系统中的任何一个部分进行路由栈数据操作时,这些操作会同步映射到共享内存区域,通过FFI通道在Flutter和原生进程之间共享,Flutter和原生进程通过共享内存区域的地址来访问和操作相同的数据;在原生层面,stack-info堆栈信息和stack-address地址可能是用于操作堆栈信息和内存地址的工具或方法,这些信息通常在原生层处理,可能被用来获取内存地址或操作堆栈,用于共享数据。
所述共享内存区域存储有路由栈数据,还保存应用的全局数据,全局数据包括应用的状态和配置信息,且共享内存区域设置有持久化接口,允许将这些数据永久保存在存储介质中;这确保了不同部分对路由栈的操作具有一致性,保持了路由栈的同步状态,共享内存区域不仅存储了路由栈数据,还用于保存应用的全局数据,这些全局数据可能包括应用的状态、配置信息等,并且,共享内存提供了持久化接口,允许将这些数据永久保存在存储介质中,以便在应用关闭后进行恢复。
并且在debug模式下,由于共享内存区域存储了路由栈数据,因此可以通过共享内存区域的数据来恢复路由栈。
本发明针对Flutter多引擎或多进程运行场景,本系统实现了跨进程、跨引擎的路由管理方案,可支持多个Flutter引擎及不同进程之间的混合页面路由与通信。
如图2所示,在S1中Flutter页面堆栈实现改变的具体步骤为:
在每个Flutter引擎αn都设置一个路由栈,路由栈δn为路由栈对应的编号,用于管理页面,且其中包含多个Navigator路由实例,构成路由栈-Navigator路由列表,每个Navigator路由都代表一个页面堆栈;接收需要显示的Navigator路由,遍历路由栈-Navigator路由列表,查找对应的路由栈δn,通过改变路由栈δn对应的index来控制当前显示的Navigator路由,并且将已经显示的Navigator路由进行隐藏,从而通过改变路由栈δn的index来对应原生容器的显示和隐藏;
将路由栈δn中多个Navigator路由实例记为子类,建立子类列表,接收原生容器展示信号,在需要展示的地方,建立一个新的Navigator路由,更新路由栈δn对应的子类属性,添加原生容器对应的Navigator路由到子类列表中,完成对原生容器的展示,当接收销毁信号的时候,同样更新路由栈δn对应的子类属性,从子类列表中移除对应的Navigator路由以销毁原生容器;
定义GlobalKey作为Navigator路由的唯一标识key,在创建Navigator路由时将定义的GlobalKey分配给Navigator路由的key属性,根据GlobalKey来获取对应的Navigator路由State,进而执行页面跳转和返回的操作,确保在整个应用程序中,使用GlobalKey时保持其唯一性,以便准确地标识和操作对应的Navigator路由,确保Flutter中的Navigator路由与原生容器之间一一对应。
还包括Flutter页面路由实现的具体步骤为:
创建一个名为MyContainerWidget的自定义小部件,其中包含了一个Navigator路由组件,这个自定义小部件通过Flutter提供的Navigator路由大大简化了页面路由的实现,自定义小部件使用onGenerateRoute方法提供路由工厂配置自动实现路由跳转;ContainerWidget通过监听Navigator路由Observer来记录ContainerWidget路由页面的数量,通过监听页面压栈和出栈操作,动态地追踪页面数量的变化,WidgetsBindingObserver的ChangeMetrics方法被利用来监测页面数量,当页面数量为零时,可以触发对Flutter堆栈和原生容器的销毁,这个方法可以帮助在Flutter页面堆栈为空时,自动地触发与原生容器的关联销毁,以便与原生应用的生命周期保持同步,总体来说:这个方案利用了Flutter的Navigator路由和Observer机制,以及WidgetsBindingObserver的生命周期监听,在容器中动态地管理页面路由,并能够在需要时与原生容器进行有效地交互和同步。
本发明针对路由操作、事件通知等场景简化了项目接入以及使用方式。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本申请所附权利要求的保护范围。本说明书中未作详细描述的部分属于本领域专业技术人员公知的现有技术。
Claims (6)
1.一种基于Flutter的移动端混合页面的管理方法,其特征在于,包括:
S1、接收应用启动信号后,系统在执行配置的EntryPoint入口预热一个Flutter引擎,在Flutter内创建一个Flutter容器实例和一个Widget结构的路由栈,路由栈中包含多个Navigator路由,且路由栈能够维护当前引擎内所有的原生容器所对应的Flutter堆栈,保持原生容器与Navigator路由一一对应;
S2、接收应用页面交互的信号后,在单引擎模式下,进行跨原生页面的Flutter页面跳转切换,将执行Flutter引擎与Flutter容器的依附与分离操作,完成应用页面交互;
其中对Flutter引擎与Flutter容器Flutter容器的依附和分离操作为:
依附操作,创建Flutter视图并添加到原生界面中;将创建的Flutter视图与Flutter引擎一一关联,随后完成Flutter引擎就会附加到Flutter视图上,进而完成原生应用中嵌入Flutter视图;
分离操作,在原生应用退出或者不需要嵌入的Flutter视图的时候,断开Flutter视图与Flutter引擎的关联,并且销毁Flutter容器。
2.如权利要求1所述的一种基于Flutter的移动端混合页面的管理方法,其特征在于,步骤S1中在Flutter内创建一个Flutter容器实例和一个Widget结构的路由栈”之后,还包括对Flutter界面的判断,具体步骤为:
Flutter框架在创建应用程序时会根据应用的配置设置默认的首页或根路由,应用默认以Flutter页面作为应用首个页面,自动判断路由导航到根路由配置的Flutter页面,并通过Navigator路由负责管理页面的堆栈,无需开发者介入;
如果在Flutter应用中Flutter页面不是根路由页面,则需要开发者手动导航至非根路由页面或者修改根页面,从而满足不同的导航需求。
3.如权利要求1所述的一种基于Flutter的移动端混合页面的管理方法,其特征在于,步骤S2中接收应用页面交互的信号后,还包括有多引擎模式下对路由关系的维护,具体步骤为:
路由跳转时提供可选Flutter引擎,当未指定Flutter引擎时,将优先从当前引擎路由查找,失败则从全局查找,其中Flutter引擎由Flutter引擎组创建,不同的Flutter引擎的编号分别记为αn,n=1,2,3······N,N为创建的Flutter引擎的总数量,且每个Flutter引擎αn对应唯一一个引擎βn,引擎βn为Flutter引擎αn对应的路径,每个Flutter引擎αn对应数个Flutter容器,γm为Flutter容器对应的路径,m=1,2,3······M,M为Flutter容器的总数量,构建从Flutter引擎到每一个Flutter容器的路径IDm=αn+βn+γm,通过IDm可全局定位到系统任意的路由页面。
4.如权利要求3所述的一种基于Flutter的移动端混合页面的管理方法,其特征在于,在多引擎模式下对路由关系进行维护时,还包括多引擎模式下的共享通信,具体步骤为:
建立一个共享内存区域,当系统中的任何一个部分进行路由栈数据操作时,这些操作会同步映射到共享内存区域,通过FFI通道在Flutter和原生进程之间共享,Flutter和原生进程通过共享内存区域的地址来访问和操作相同的数据;
所述共享内存区域存储有路由栈数据,还保存应用的全局数据,全局数据包括应用的状态和配置信息,且共享内存区域设置有持久化接口,允许将这些数据永久保存在存储介质中;
并且在debug模式下,由于共享内存区域存储了路由栈数据,因此可以通过共享内存区域的数据来恢复路由栈。
5.如权利要求1所述的一种基于Flutter的移动端混合页面的管理方法,其特征在于,S1中通过路由栈维护当前引擎内所有的原生容器所对应的Flutter堆栈的具体步骤为:
在每个Flutter引擎αn都设置一个路由栈,路由栈δn为路由栈对应的编号,用于管理页面,且其中包含多个Navigator路由实例,构成路由栈-Navigator路由列表,每个Navigator路由都代表一个页面堆栈;接收需要显示的Navigator路由,遍历路由栈-Navigator路由列表,查找对应的路由栈δn,通过改变路由栈δn对应的index来控制当前显示的Navigator路由,并且将已经显示的Navigator路由进行隐藏,从而通过改变路由栈δn的index来对应原生容器的显示和隐藏;
将路由栈δn中多个Navigator路由实例记为子类,建立子类列表,接收原生容器展示信号,在需要展示的地方,建立一个新的Navigator路由,更新路由栈δn对应的子类属性,添加原生容器对应的Navigator路由到子类列表中,完成对原生容器的展示,当接收销毁信号的时候,同样更新路由栈δn对应的子类属性,从子类列表中移除对应的Navigator路由以销毁原生容器;
定义GlobalKey作为Navigator路由的唯一标识key,在创建Navigator路由时将定义的GlobalKey分配给Navigator路由的key属性,根据GlobalKey来获取对应的Navigator路由State,进而执行页面跳转和返回的操作,确保在整个应用程序中,使用GlobalKey时保持其唯一性,以便准确地标识和操作对应的Navigator路由,确保Flutter中的Navigator路由与原生容器之间一一对应。
6.如权利要求1所述的一种基于Flutter的移动端混合页面的管理方法,其特征在于,步骤S2进行跨原生页面的Flutter页面跳转切换时,还包括Flutter页面路由实现的具体步骤为:
创建一个名为MyContainerWidget的自定义小部件,其中包含了一个Navigator路由组件,自定义小部件使用onGenerateRoute方法提供路由工厂配置自动实现路由跳转;ContainerWidget通过监听Navigator路由Observer来记录ContainerWidget路由页面的数量,通过监听页面压栈和出栈操作,动态地追踪页面数量的变化,WidgetsBindingObserver的ChangeMetrics方法被利用来监测页面数量,当页面数量为零时,可以触发对Flutter堆栈和原生容器的销毁。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410451190.2A CN118051294B (zh) | 2024-04-16 | 2024-04-16 | 一种基于Flutter的移动端混合页面的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410451190.2A CN118051294B (zh) | 2024-04-16 | 2024-04-16 | 一种基于Flutter的移动端混合页面的管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118051294A true CN118051294A (zh) | 2024-05-17 |
CN118051294B CN118051294B (zh) | 2024-08-13 |
Family
ID=91053895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410451190.2A Active CN118051294B (zh) | 2024-04-16 | 2024-04-16 | 一种基于Flutter的移动端混合页面的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118051294B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061981A (zh) * | 2019-11-05 | 2020-04-24 | 贝壳技术有限公司 | 页面管理方法、装置、存储介质及电子设备 |
CN112558937A (zh) * | 2020-12-16 | 2021-03-26 | 北京百度网讯科技有限公司 | 页面管理方法、装置、电子设备、介质及产品 |
CN113778720A (zh) * | 2021-09-17 | 2021-12-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种页面导航方法、设备及可读存储介质 |
CN115328528A (zh) * | 2021-05-10 | 2022-11-11 | 上海博泰悦臻网络技术服务有限公司 | Flutter引擎管理方法、系统、介质及原生端 |
WO2023087897A1 (zh) * | 2021-11-19 | 2023-05-25 | 京东方科技集团股份有限公司 | 页面显示方法及装置 |
CN116484130A (zh) * | 2023-05-09 | 2023-07-25 | 政采云有限公司 | 一种页面加载方法、装置、设备、介质及程序产品 |
-
2024
- 2024-04-16 CN CN202410451190.2A patent/CN118051294B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061981A (zh) * | 2019-11-05 | 2020-04-24 | 贝壳技术有限公司 | 页面管理方法、装置、存储介质及电子设备 |
CN112558937A (zh) * | 2020-12-16 | 2021-03-26 | 北京百度网讯科技有限公司 | 页面管理方法、装置、电子设备、介质及产品 |
CN115328528A (zh) * | 2021-05-10 | 2022-11-11 | 上海博泰悦臻网络技术服务有限公司 | Flutter引擎管理方法、系统、介质及原生端 |
CN113778720A (zh) * | 2021-09-17 | 2021-12-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种页面导航方法、设备及可读存储介质 |
WO2023087897A1 (zh) * | 2021-11-19 | 2023-05-25 | 京东方科技集团股份有限公司 | 页面显示方法及装置 |
CN116484130A (zh) * | 2023-05-09 | 2023-07-25 | 政采云有限公司 | 一种页面加载方法、装置、设备、介质及程序产品 |
Non-Patent Citations (2)
Title |
---|
腾讯大讲堂: "Flutter混合栈路由实践与优化", Retrieved from the Internet <URL:《https;//www.sohu.com/a/460472838_187948》> * |
阿里云云栖号: "码上用它开始 Flutter 混合开发—FlutterBoost", Retrieved from the Internet <URL:《https://blog.csdn.net/yunqiinsight/article/details/88634066》> * |
Also Published As
Publication number | Publication date |
---|---|
CN118051294B (zh) | 2024-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20070241882A1 (en) | User Interface for Real-Time Management of Vehicles | |
CN111382214A (zh) | 一种基于3dgis bim的综合管廊运维管理系统 | |
CN109656889B (zh) | 基于区块链的文件系统实现方法、装置、设备和存储介质 | |
CN104981768A (zh) | 基于云的串流数据接收机和保存程序 | |
EP4209904A1 (en) | Cloud resource management method and apparatus, and computer device and storage medium | |
CN110413282A (zh) | 一种冗余资源处理方法、装置、设备及存储介质 | |
US20110153661A1 (en) | Navigation device and database update program | |
CN112433712A (zh) | 报表展示方法、装置、计算机设备和存储介质 | |
CN114791846A (zh) | 一种针对云原生混沌工程实验实现可观测性的方法 | |
CN114546563B (zh) | 一种多租户页面访问控制方法和系统 | |
US20060095432A1 (en) | Disclosure control system and method | |
CN101556540B (zh) | 多种备份软件的统一管理方法和系统 | |
CN111274004B (zh) | 进程实例管理方法、装置及计算机存储介质 | |
CN101667183B (zh) | 一种基于定制的索引建立方法、装置和系统 | |
CN118051294B (zh) | 一种基于Flutter的移动端混合页面的管理方法 | |
CN110389944B (zh) | 一种基于模型的元数据管理系统及方法 | |
KR101310420B1 (ko) | 사용자가 정의 가능한 업무 절차 기반 도시 계획 관리 시스템 및 이를 위한 기록매체 | |
CN115984677A (zh) | 数据智能分析方法、装置和系统 | |
CN114328492B (zh) | 用于企业应用集成的数据处理方法以及相关装置 | |
CN114895875B (zh) | 一种零代码可视化信息系统元数据的生产应用方法及系统 | |
CN113435948B (zh) | 一种电商平台数据监测方法及系统 | |
CN115412452A (zh) | 一种基于物理层Fabric场景的配置导航方法、设备及介质 | |
CN112118298A (zh) | 面向分布式服务的配置管理方法及装置 | |
KR102503679B1 (ko) | 차량의 자율주행 제어를 위한 정밀지도 생성 방법, 장치 및 컴퓨터프로그램 | |
CN113569101B (zh) | 业务信息处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |