Flutter:如何在没有后退按钮的情况下推送导航路线?
Flutter: How to push a navigation route without the back button?
我知道 Navigator.pushReplacementNamed
允许您替换返回堆栈上的当前屏幕,但是如何处理当前屏幕已经有自己的后退按钮的情况?
我注意到如果我在这种情况下使用 .pushReplacementNamed
功能,它会保留上一个屏幕的后退按钮,但我想要这样的流程:
屏幕 A .pushNamed
-> 屏幕 B(能够导航回 A).pushReplacementNamed
-> 屏幕 C(应该无法导航回 B 或 A)
覆盖后退按钮可能对您有所帮助。
请搜索 appBar 和 WillPopScope
的前导参数
您应该使用 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)
。
我知道 Navigator.pushReplacementNamed
允许您替换返回堆栈上的当前屏幕,但是如何处理当前屏幕已经有自己的后退按钮的情况?
我注意到如果我在这种情况下使用 .pushReplacementNamed
功能,它会保留上一个屏幕的后退按钮,但我想要这样的流程:
屏幕 A .pushNamed
-> 屏幕 B(能够导航回 A).pushReplacementNamed
-> 屏幕 C(应该无法导航回 B 或 A)
覆盖后退按钮可能对您有所帮助。
请搜索 appBar 和 WillPopScope
的前导参数您应该使用 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)
。