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
});