Flutter:Navigator.pushNamedAndRemoveUntil() 完成后如何执行操作
Flutter: How to perform an actions after Navigator.pushNamedAndRemoveUntil() has completed
在我的 Flutter 应用中,我需要清除 Navigator 堆栈并在按下某个按钮时返回主页。为此,我使用了 Navigator.pushNamedAndRemoveUntil(context, "/", (r) => false);
。我还需要在导航完成后调用一个函数,这意味着我现在在主页上。
我试过在 Navigator.pushNamedAndRemoveUntil()
上调用 .whenComplete()
方法,但它似乎不起作用。
提前致谢。
你可以试试这个代码,请告诉我。
gotoNewPage(context) async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
NewPage()));
/// Your logic is here.
}
我会说在 dipose()
中使用你的函数,所以当你导航到另一个屏幕时从树中删除小部件时会调用它。
class _MyPageState extends State<MyPage> {
// ...
// Some code
@override
void dispose() {
// Insert your function here
super.dispose();
}
// ...
}
使用didPush()
方法
这可用于在导航到另一个屏幕后调用您的函数,因为它 returns 当推送转换完成时。但是,您必须使用 pushAndRemoveUntil()
而不是 pushNamedAndRemoveUntil()
。因此,您可以创建一个提供 didPush()
方法的 PageRoute
。
// Create your route
MaterialPageRoute route = MaterialPageRoute(
builder: (context) => HomePage(),
);
// Push the route onto the navigator, and then remove all the previous routes
Navigator.pushAndRemoveUntil(context, route, (r) => false);
// This returns when the push transition is complete.
route.didPush().whenComplete(() {
// Insert your function here
});
在我的 Flutter 应用中,我需要清除 Navigator 堆栈并在按下某个按钮时返回主页。为此,我使用了 Navigator.pushNamedAndRemoveUntil(context, "/", (r) => false);
。我还需要在导航完成后调用一个函数,这意味着我现在在主页上。
我试过在 Navigator.pushNamedAndRemoveUntil()
上调用 .whenComplete()
方法,但它似乎不起作用。
提前致谢。
你可以试试这个代码,请告诉我。
gotoNewPage(context) async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
NewPage()));
/// Your logic is here.
}
我会说在 dipose()
中使用你的函数,所以当你导航到另一个屏幕时从树中删除小部件时会调用它。
class _MyPageState extends State<MyPage> {
// ...
// Some code
@override
void dispose() {
// Insert your function here
super.dispose();
}
// ...
}
使用didPush()
方法
这可用于在导航到另一个屏幕后调用您的函数,因为它 returns 当推送转换完成时。但是,您必须使用 pushAndRemoveUntil()
而不是 pushNamedAndRemoveUntil()
。因此,您可以创建一个提供 didPush()
方法的 PageRoute
。
// Create your route
MaterialPageRoute route = MaterialPageRoute(
builder: (context) => HomePage(),
);
// Push the route onto the navigator, and then remove all the previous routes
Navigator.pushAndRemoveUntil(context, route, (r) => false);
// This returns when the push transition is complete.
route.didPush().whenComplete(() {
// Insert your function here
});