如何在不使用命名路由的情况下弹出两个屏幕?

How to pop two screens without using named routing?

比如我现在的路由是这样的:

Login -> Screen1 -> Screen2 -> Screen3 -> Screen4

我想从 Screen4 回到 Screen2。 我不能使用命名路由,因为我必须将参数传递给 Screen2。 在 Screen4 中推送 Screen2 不是一个好的解决方案。

使用导航器的 popUntil 方法 class。

例如

int count = 0;
Navigator.of(context).popUntil((_) => count++ >= 2);

但是,我建议为您的路线定义名称并使用 popUntil,因为它是按照文档设计的。

弹出两次即可;

nav = Navigator.of(context);
nav.pop();
nav.pop();

如果你想弹出3次,可以使用下面的代码。

int count = 3;
Navigator.of(context).popUntil((_) => count-- <= 0);

将作为 StatefulWidget 从中进行转换的 class。要按下操作,请添加带有 thenpushNamed 导航器,这将在 returning 到此屏幕后触发。传递 setState 以更新小部件:

onTap: () {
  Navigator.pushNamed(
    context,
    RouteNames.viewExercises,
  ).then((value) {
    setState(() {});
  });
},

return 使用的屏幕:

Navigator.of(context)
  ..pop()
  ..pop()
  ..pop();

其中 ..pop() 根据需要多次使用。