导航器路线清除抖动堆栈

sar*_*van 8 dart flutter

在我的应用程序中,我有三个屏幕,分别是login,verifyotp,generatepass。我知道如何从一页移动到另一页,例如:Navigator.pushNamed(context, "/theNameOfThePage");。我有一个流程,我从login-> verifyotp-> generatepass移到我的问题,现在的问题是如何从generatepass移到登录页面并清除所有堆栈。我是一名android开发人员,所以在android中我们有intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);。我如何在颤振中获得相同的结果!

Jam*_*ose 13

正如其他人已经提到的,Navigator.pushNamedAndRemoveUntil这是要走的路,但如果有人想知道如何使用组件类型(而不是字符串路由路径)来做到这一点,这就是您的做法。

Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (_) => LoginPage()), (route) => false);

我个人更喜欢使用类型名称,因为我在初始开发过程中多次更改路线路径,直到达到稳定的路线名称模式,并且当我这样做时,我不想进行大量搜索/替换。


Ken*_*rwa 8

要添加到上面 Paul Iluhin 的答案中,如果您想将参数传递到新页面,只需在 后面添加参数即可(r) => false。这是一个例子。

Navigator.pushNamedAndRemoveUntil(context, "/newRouteName", (r) => false, arguments: {
  "arg_1": firstArgument,
  "arg_2": secondArgument
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢亲爱的,我很感激你的回答,它有效:) (2认同)

Jac*_*ips 5

使用Navigator.popUntil

void _logout() {
  Navigator.popUntil(context, ModalRoute.withName('/login'));
}
Run Code Online (Sandbox Code Playgroud)

  • `Navigator.popUntil(context, ModalRoute.withName('/'));` 对我有用!!我的登录页面有 `routes: <String, WidgetBuilder>{ "/VerifyOtp": (BuildContext context) => new VerifyOtp(), "/GeneratePass": (BuildContext context) => new GeneratePass(), },` (2认同)

Pau*_*hin 5

完全清除Navigator的历史记录并导航到新路线:

void _logout() {
   Navigator.pushNamedAndRemoveUntil(context, "/newRouteName", (r) => false);
}
Run Code Online (Sandbox Code Playgroud)