1. 应用场景
开发中经常遇到
路由跳转时拿不到context怎么办,eg: token失效/异地登录跳转登录页面。
获取不到当前路由名称怎么办,eg: 点击push推送跳转指定路由,如果已经在当前页面就replace,如果不在就push。
注册监听路由跳转,做一些想做的事情 ,eg:不同路由,显示不同状态栏颜色。
等等...
2. 解决方案
解决思路:
MaterialApp 的routes属性赋值路由数组,navigatorObservers属性赋值路由监听对象NavigatorManager。
在NavigatorManager里实现NavigatorObserver的didPush/didReplace/didPop/didRemove,并记录到路由栈List _mRoutes中。
将实时记录的路由跳转,用stream发一个广播,哪里需要哪里注册。
3. 具体实现
main.dart
MaterialApp(
navigatorObservers: [NavigatorManager.getInstance()],routes: NavigatorManager.configRoutes,...
)
navigator_manager.dart
class NavigatorManager extends NavigatorObserver {
/* 配置routes */
static Map configRoutes = {
PackageInfoPage.sName: (context) =>