在Flutter中,有什么方法可以监听导航的变化吗?
示例:导航在以下位置触发Widget A:
Navigator.of(context).pushNamed('/chat');
Run Code Online (Sandbox Code Playgroud)
当执行上面的代码时,我希望在 的子级中触发一个事件Widget A。这可能吗?
使用路由观察器:
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
Run Code Online (Sandbox Code Playgroud)
然后将其添加到根materialApp小部件:
MaterialApp(
theme: ThemeData(),
navigatorObservers: [routeObserver],
)
Run Code Online (Sandbox Code Playgroud)
我们需要在每个可能推送或弹出到路由堆栈的小部件中实现 RouteAware。
class Screen extends State<Screen3> with RouteAware{
...
@override
void didChangeDependencies() {
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute<dynamic>);
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPush() {
final route = ModalRoute.of(context)?.settings.name;
print('didPush route: $route');
}
@override
void didPopNext() {
final route = ModalRoute.of(context)?.settings.name;
print('didPopNext route: $route');
}
@override
void didPushNext() {
final route = ModalRoute.of(context)?.settings.name;
print('didPushNext route: $route');
}
@override
void didPop() {
final route = ModalRoute.of(context)?.settings.name;
print('didPop route: $route');
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9432 次 |
| 最近记录: |