我们从 Page1 移到了 Page2 但现在从 Page2 我们又回到了 Page1 像这样:
Navigator.of(context).pop();
我们如何在 Page1 上检测到我们返回了?
Jay*_*ara 17
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => NextPage(),
),
).then((_){
// Here you will get callback after coming back from NextPage()
// Do your code here
});
Run Code Online (Sandbox Code Playgroud)
在你的Page1
,当你按下时Page2
等待它弹出
Future<void> _goToPage2() async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Page2(),
),
);
print("Page2 is popped");
}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是创建您自己的NavigatorObserver
.
1-创建您的NavigatorObserver
final routeObserver = MyRouteObserver();
class MyRouteObserver extends NavigatorObserver {
final Set<RouteAware> _listeners = <RouteAware>{};
void subscribe(RouteAware routeAware) {
_listeners.add(routeAware);
}
void unsubscribe(RouteAware routeAware) {
_listeners.remove(routeAware);
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
for (var listener in _listeners) {
listener.didPop();
}
}
}
Run Code Online (Sandbox Code Playgroud)
2-将其添加到您的MaterialApp
return MaterialApp(
navigatorObservers: [routeObserver],
...
Run Code Online (Sandbox Code Playgroud)
RouteAware
3-在您想要监听导航事件的小部件中实现,并订阅/取消订阅您的routeObserver
class _TablePageState extends State<TablePage> implements RouteAware {
@override
void initState() {
super.initState();
routeObserver.subscribe(this);
}
@override
Widget build(BuildContext context) {
return Container();
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPop() {
//This method will be called from your observer
}
@override
void didPopNext() {}
@override
void didPush() {}
@override
void didPushNext() {}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1388 次 |
最近记录: |