flutter - 整个应用程序的通用导航侦听器
问题描述
我正在尝试找到一种在我的应用程序(MaterialApp)的根目录中设置全局导航侦听器的方法,它可以让我跟踪所有导航事件,包括实际路线名称(例如/home/page1)、导航类型等.
我搜索类似:
MaterialApp(
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) => route(settings),
onNavigationChange: (RouteType type, String currentRoute) {
// type can an enum be like: 'pop', 'push', 'replace' etc.
// currentRoute is the current route name defined in a pushNamed for example
}
),
注意:此代码是非功能性的,仅用于说明我想要的;)
在我的搜索过程中,我发现了一些解决方案,例如RouteObserver、route_observer_mixin,这几乎是我正在寻找的,但我需要用一个 mixin 来包装我的所有页面......所以没有一个全局解决方案:/
你有什么线索吗?
提前致谢,
感谢@pskink 进行编辑,请参阅下面的解决方案
解决方案
最终的解决方案是像这样创建 RouteObserver 的扩展:
class MyNavigatorObserver extends RouteObserver<PageRoute<dynamic>> {
@override
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
super.didPush(route, previousRoute);
if (route is PageRoute) {
// do stuff
}
}
@override
void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {
super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
if (newRoute is PageRoute) {
// do stuff
}
}
@override
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
super.didPop(route, previousRoute);
if (previousRoute is PageRoute && route is PageRoute) {
// do stuff
}
}
}
然后在 MaterialApp 小部件上设置它:
static MyNavigatorObserver observer =
new MyNavigatorObserver();
MaterialApp(
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) => route(settings),
navigatorObservers: [observer],
),
谢谢@pskink!
推荐阅读
- java - 如何在两个不同的类中使用相同的方法(带有 Scenebuilder 的 JavaFX)?
- movesense - Movesense:如何确定 mac os x 上的 wbcmd 端口
- php - 插入表 - 用数组替换列名和值
- database - Azure WP 应用服务 - 我想克隆我的网站
- c# - 从 null 隐式转换
- javascript - JavaScript file with useful constants shared by many modules in modern JS
- html - IndexedDB - 带有任意键列表的简单索引上的 IDBKeyRange
- javascript - 在 Node.js 中注册时如何与 MySQL DB 信息进行重复比较
- c - C、Assembly x86 - 调用替代
- html - 相对