我知道 Navigator.pushReplacementNamed
允许您替换返回堆栈中的当前屏幕,但是您如何处理当前屏幕已经有自己的返回按钮的情况?
我注意到如果我在这种情况下使用 .pushReplacementNamed
函数,它会保留上一个屏幕的后退按钮,但我希望有这样的流程:
屏幕 A .pushNamed
-> 屏幕 B(能够导航回 A).pushReplacementNamed
-> 屏幕 C(不能导航回 B或 A)
最佳答案
如果您在目标屏幕上使用 AppBar
小部件,请确保将此行添加到您的 AppBar
小部件中,这将防止应用程序自动添加后退AppBar
默认按钮:
automaticallyImplyLeading: false,
但是,无论您是否使用 AppBar
并且您不想通过单击后退按钮(物理按钮或 Cupertino 滑动手势)转到上一屏幕,您必须使用 WillPopScope
作为目标屏幕上的根小部件。此外,您的 onWillPop
方法应如下所示:
onWillPop: () async => false,
通过返回 false,您将限制您的屏幕离开屏幕并且您现在无法通过单击后退按钮退出该应用程序。因为您要返回 false
作为是否要返回的决定。如果您想关闭应用程序的新屏幕,您可以在 onWillPop
方法内的这一点上使用 exit(0)
。
关于Flutter:如何在没有后退按钮的情况下推送导航路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64360805/