Flutter Navigator2.0使用分享
大约 3 分钟
Flutter Navigator2.0使用分享
flutter2.0 对Router路由进行了一次大修改,开发时涉及到项目重构,所以在此分享一下Navgator2.0的使用、原理、封装
一、引入Navigator2.0的好处
- 原始 API 中的 initialRoute 参数,即系统默认的初始页面,在应用运行后就不能在更改了。启动后从当前的路由栈状态 [Main -> Login -> Settings] 重启切换到新的 [Main -> List -> Detail[id=24],Navigator1.0 并没有一种优雅的实现方式实现这种效果。
- 原始的命令式 Navigator API 只提供给了开发者一些非常针对性的接口,如 push、pop 等,而没有给出一种更灵活的方式让我们直接操作路由栈。这种做法其实与 Flutter 理念相违背,如果我们想要改变某个 Widget 的所有子组件只需要重建所有子组件并且创建一系列新的 Widget 即可,而将此概念应用在路由中?当应用中存在一系列路由页面并想要更改时,我们只能调用 push、pop 这类接口来回操作,Flutter 味道全无,navigator2.0就是将widget相关的三棵树概念应用到路由中。
- 嵌套路由下,手机设备自带的回退按钮只能由根 Navigator 响应。在目前的应用中,我们很多场景都需要在某个子 tab 内单独管理一个子路由栈,假设有这个场景,用户在子路由栈中做一系列路由操作之后,点击系统回退按钮,消失的将是整个上层的根路由,我们当然可以使用某种措施来避免这种状况,但归咎起来,这也不应该是应用开发者应该考虑的问题。
一、Navigator2.0使用
二、Navigator2.0原理
Navigator 2.0 提供了一系列全新的接口,可以实现将路由状态成为应用状态的一部分,并能够通过底层 API 实现参数解析的功能,新增的 API 如下:
- Page,用来表示 Navigator 路由栈中各个页面的配置信息。
- Router,用来制定要由 Navigator 展示的页面列表,通常,该页面列表会根据系统或应用程序的状态改变而改变。
- RouteInformationParser,持有 RouteInformationProvider 提供的 RouteInformation ,可以将其解析为我们定义的数据类型。
- RouterDelegate,定义应用程序中的路由行为,例如 Router 如何知道应用程序状态的变化以及如何响应。主要的工作就是监听 RouteInformationParser 和应用状态并通过当前页面列表构建 ·。
- BackButtonDispatcher,响应后退按钮,并通知 Router
参考技术文章:
- Flutter Navigator 2.0 全面解析: https://blog.csdn.net/u013491829/article/details/109330086
- Flutter Navigator2.0 完全指南与原理解析 https://mp.weixin.qq.com/s/hDLxWJuUylw8UaOidUa3Hg
三、基于navigator2.0路由框架flutter_bling_router功能演示及源码讲解
框架功能:
- 基本的路由导航,页面跳转
- 支持深度链接(deeplink),url链接匹配
- 支持构造器初始化参数
- 支持App 模块化注册
- 支持常见的动画转场效果,也可以自定义转场
参考源码: https://github.com/coder-dongjiayi/flutter_bling_router