如何在不使用命名路由的情况下弹出两个屏幕?
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。要按下操作,请添加带有 then
的 pushNamed
导航器,这将在 returning 到此屏幕后触发。传递 setState
以更新小部件:
onTap: () {
Navigator.pushNamed(
context,
RouteNames.viewExercises,
).then((value) {
setState(() {});
});
},
return 使用的屏幕:
Navigator.of(context)
..pop()
..pop()
..pop();
其中 ..pop()
根据需要多次使用。
比如我现在的路由是这样的:
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。要按下操作,请添加带有 then
的 pushNamed
导航器,这将在 returning 到此屏幕后触发。传递 setState
以更新小部件:
onTap: () {
Navigator.pushNamed(
context,
RouteNames.viewExercises,
).then((value) {
setState(() {});
});
},
return 使用的屏幕:
Navigator.of(context)
..pop()
..pop()
..pop();
其中 ..pop()
根据需要多次使用。