Flutter - 防止循环流行

标签 flutter dart

在我的 Flutter 应用程序中,我有两个页面(ViewPageEditPage),它们都有直接相互路由的按钮。也可以从 HomePage 直接访问 EditPage 页面。

场景路线: HomePage > ViewPage > EditPage > ViewPage > EditPage > ViewPage > ...

在此示例 route ,需要用户弹出几次才能返回主页。有没有办法让路由从 EditPageHomePage > ViewPage,即使用户在 EditPageHomePage 之间来回多次查看页面

当前代码:

    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/

相关文章:

html - 如何显示 Dart :html file image in Flutter web?

flutter - 如何在 Hive (Flutter) 中存储列表?

dart - Flutter 从 bottomappbar 更改页面

Dart StageXL 在重叠的 Sprite 上激活鼠标事件

flutter - Flutter:如何在容器内对齐小部件

dart - 在 <div> 中显示条形图

flutter - 让小部件静静地溢出外部屏幕

flutter - 如何将桌面视频播放器(macOS 和 Windows)添加到 flutter 中

dart - 如何在 Flutter 应用中实现支付?

dart - Dart源代码中未定义的位置