Rom*_*kov 7 routes observers dart flutter flutter-go-router
我一直在通过第三方集成(例如SentryNavigatorObserver,FirebaseAnalyticsObserver)来分析不同的导航观察者,以使默认情况下没有它的工具相同。但我注意到这些都没有真正捕获所有路线转换。当他们在相应的控制台中显示数据时我看到了它。是的,它适用于push/ ,但不会跟踪pop同一级别内的任何转换。go这很烦人。有人知道解决的方法吗?
例如,
观察到从/page到 的转变。/page/detail
/pageA从到 的过渡/pageB则不是。
kri*_*yaa 18
延伸Observer自NavigatorObserver
代码
GoRouter(
initialLocation: '/',
navigatorKey: _rootNavigatorKey,
observers: [
GoRouterObserver(), Specify your observer here
],
routes: [
GoRoute(
...
)
GoRoute(
...
),
],
);
class GoRouterObserver extends NavigatorObserver {
@override
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
print('MyTest didPush: $route');
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
print('MyTest didPop: $route');
}
@override
void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
print('MyTest didRemove: $route');
}
@override
void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
print('MyTest didReplace: $newRoute');
}
}
Run Code Online (Sandbox Code Playgroud)
Rom*_*kov 11
发现问题了。一些根路线是使用pageBuilder和构建的NoTransitionPage,因此可以避免动画,因为它们作为选项卡工作。
但除了设置NoTransitionPage.key初始化参数之外,您还需要设置NoTransitionPage.name要识别的路由。
因此,因为我没有这样做,所以导航器将所有这些路线视为null,因此它只是没有看到它们之间发生变化。
示例应该如何:
GoRoute(
name: Routes.home,
path: Routes.getPathNamed(Routes.home),
pageBuilder: (context, state) => NoTransitionPage<void>(
key: state.pageKey, // <--- note this
name: state.name, // <--- note this
child: ScaffoldWithBottomBarNav(body: Routes.getPageNamed(Routes.home)),
),
),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7215 次 |
| 最近记录: |