【发布时间】:2020-07-24 13:44:13
【问题描述】:
我已经阅读了有关该主题的其他答案,但我有点困惑。
我有这种非常常见的情况,ScreenA 触发导航到ScreenB,ScreenB 完成它的工作,然后用户点击后退按钮,我们返回到ScreenA。此时,我想运行一些代码,但我不明白该怎么做。
这是我导航到ScreenB的代码:
Navigator.pushNamed(context, Router.ScreenB)
导航器:
class Router {
static const ScreenB = "/b";
static Route<dynamic> generateRoute(RouteSettings routeSettings) {
switch (routeSettings.name) {
case ScreenB :
return MaterialPageRoute(builder: (_) => ScreenB());
default:
return MaterialPageRoute(builder: (_) {
return Scaffold(
body: Center(
child: Text('No route defined for ${routeSettings.name}'),
),
);
});
}
}
}
我试过了
Navigator.pushNamed(context, Router.ScreenB)
.then((value) {
//do stuff
});
但是then() 永远不会被调用,即使我添加了也不会
Navigator.pop(context);
在ScreenB
我在这里错过了什么?
【问题讨论】:
-
您是否尝试将值从 ScreenB 传递回 ScreenA?
-
@DidierPeranGanthier 不,他们试图在弹出小部件后运行代码。
-
所以如果你在
.then中添加一个print语句,它就永远不会打印?这应该没什么区别,但是你试过await吗? -
正确,我不在乎返回值。基本上 ScreenA 包含一个列表, ScreenB 允许您编辑列表项,所以当您从 ScreenB 返回时,我想显示更新的项目。 @ChristopherMoore,它不打印任何东西。你会把等待放在哪里?我之前尝试过 Navigator.pushNamed() 无济于事
-
是的,这就是放置
await的地方。你在哪里添加Navigator.pop?
标签: flutter dart navigation