在我的 Flutter 应用程序中,我有两个页面(ViewPage
和 EditPage
),它们都有直接相互路由的按钮。也可以从 HomePage
直接访问 EditPage
页面。
场景路线: HomePage > ViewPage > EditPage > ViewPage > EditPage > ViewPage > ...
在此示例 route ,需要用户弹出几次才能返回主页
。有没有办法让路由从 EditPage
到 HomePage > ViewPage
,即使用户在 EditPage
和 HomePage
之间来回多次查看页面
?
当前代码:
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditPage(
contract: contract,
),
),
);
我尝试使用各种不同的导航选项,但没有成功(例如下面的 pushAndRemoveUntil
)。
var route = MaterialPageRoute(
builder: (context) => EditPage(
contract: contract,
),
);
Navigator.of(context).pushAndRemoveUntil(route, (route) => !route.isActive);
澄清编辑:
用户的示例路线:HomePage > ViewPage > EditPage > ViewPage > EditPage > ViewPage > EditPage
弹出最后一个 EditPage
时的当前路由行为:HomePage > ViewPage > EditPage > ViewPage > EditPage > ViewPage
弹出最后一个 EditPage
时所需的路由行为:HomePage > ViewPage
澄清编辑 2:
进一步思考这一点,这是使这项工作正常进行所需的逻辑(我认为)。从 ViewPage
弹出时,始终导航到 HomePage
(我想我可以使用标准 .push 方法来完成此操作)。
但是,当从 EditPage
弹出时,需要转到 ViewPage
(如果最初是从 ViewPage
导航的)或 HomePage
(如果最初是从 HomePage
导航到的)。总之,如果 ViewPage
在路由中,则转到 ViewPage
的第一个实例,否则导航到 HomePage
的第一个实例。
我希望这一切都有意义,因为遵循起来有点令人困惑......
最佳答案
通过使用 if 语句和额外变量来解决。如果我们从 ViewPage 导航到 Edit,请使用 .pop()
返回 ViewPage,否则(从主页)“.push”EditPage。
查看页面:
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditPage(
pushedFromViewPage: true,
),
),
);
编辑页面:
if (widget.pushedFromViewPage) {
Navigator.of(context).pop();
} else {
Route route = MaterialPageRoute(
builder: (context) => ViewPage(),
);
Navigator.of(context).push(route);
}
关于Flutter - 防止循环流行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59276029/