我知道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)
。
您应该用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和WillPopScope的前导参数