【问题标题】:Flutter: How to push a navigation route without the back button?Flutter:如何在没有返回按钮的情况下推送导航路线?
【发布时间】:2020-10-14 20:09:41
【问题描述】:
我了解Navigator.pushReplacementNamed 允许您在返回栈上替换当前屏幕,但是您如何处理当前屏幕已经有自己的返回按钮的情况?
我注意到如果我在这种情况下使用.pushReplacementNamed 函数,它会保留上一个屏幕的后退按钮,但我希望有这个流程:
屏幕 A .pushNamed -> 屏幕 B(能够导航回 A).pushReplacementNamed -> 屏幕 C(应该无法导航回 B 或 A)
【问题讨论】:
标签:
flutter
dart
navigation
【解决方案1】:
如果您在目标屏幕上使用AppBar 小部件,请确保将此行添加到您的AppBar 小部件中,这将阻止应用默认在AppBar 上自动添加后退按钮:
automaticallyImplyLeading: false,
但是,无论您是否使用AppBar,并且您不想通过单击后退按钮(物理按钮或Cupertino 滑动手势)转到上一个屏幕,您都必须使用WillPopScope 作为根小部件在目标屏幕上。此外,您的 onWillPop 方法应如下所示:
onWillPop: () async => false,
通过返回 false,您将限制您的屏幕离开屏幕,并且您现在无法通过单击后退按钮退出应用程序。因为您将返回false 作为您是否要返回的决定。如果您希望关闭应用程序的新屏幕,您可以在 onWillPop 方法内的这一点上使用 exit(0)。
【解决方案2】:
你应该用 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);
},
),
],
)
),
),
);
}
}
【解决方案3】:
覆盖后退按钮可能会对您有所帮助。
请搜索 appBar 的主要参数 和 WillPopScope