Flutter:如何在没有后退按钮的情况下推送导航路线?

Flutter: How to push a navigation route without the back button?

我知道 Navigator.pushReplacementNamed 允许您替换返回堆栈上的当前屏幕,但是如何处理当前屏幕已经有自己的后退按钮的情况?

我注意到如果我在这种情况下使用 .pushReplacementNamed 功能,它会保留上一个屏幕的后退按钮,但我想要这样的流程:

屏幕 A .pushNamed -> 屏幕 B(能够导航回 A).pushReplacementNamed -> 屏幕 C(应该无法导航回 B 或 A)

覆盖后退按钮可能对您有所帮助。

请搜索 appBarWillPopScope

的前导参数

您应该使用 WillPopScope 包装根 Widget 以便能够处理后退按钮

下面的例子

class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
  return new WillPopScope(
    onWillPop: () async => false,
    child: Scaffold(
      appBar: AppBar(
        title: Text("WillPopScope example"),
      ),
      body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              RaisedButton(
                child: Text('Back'),
                onPressed: () {
                  Navigator.pop(context);
                },
              ),
            ],
          )
      ),
    ),
  );
}

}

如果您在目标屏幕上使用 AppBar 小部件,请确保将此行添加到 AppBar 小部件中,这将阻止应用程序在默认情况下自动添加后退按钮AppBar :

    automaticallyImplyLeading: false,

但是,无论您是否使用 AppBar 并且您不想通过单击后退按钮(物理按钮或 Cupertino 滑动手势)转到上一屏幕,您必须使用 WillPopScope 作为目标屏幕上的根小部件。此外,您的 onWillPop 方法应如下所示:

onWillPop: () async => false,

通过返回 false,您将限制您的屏幕离开屏幕,并且您现在无法通过单击后退按钮退出应用程序。因为你要回去还是不回去,你要返回false。如果您想关闭应用程序的新屏幕,可以在 onWillPop 方法中的这一点上使用 exit(0)