代码之家  ›  专栏  ›  技术社区  ›  Andrei Volgin

如何保持在Flatter中访问相同视图的历史?

  •  0
  • Andrei Volgin  · 技术社区  · 7 年前

    我想看一本书。它显示一本书和相关书籍的列表。当用户按下相关书籍时,应用程序需要显示相同的书籍视图,但使用不同的书籍。要求是,当用户点击“后退”按钮时,他将看到上一本书,而不是不同类型的上一个视图(例如搜索结果)。

    我希望使用标准导航器来实现这个用例,类似于您如何在浏览器中注册历史标记,同时实际保持在同一页面上。有人知道这是否可能吗?

    Navigator.push(_viewContext,
            MaterialPageRoute(
              builder: (context) {
                return BookView(id: _newBookId);
              },
            ));
    

    但这会导致BookView的多个副本,每个副本同时调用其构建。这对我来说就像一个bug——我希望Navigator不会为同一个视图创建多个实例。在这种情况下,从未调用BookView的dispose()方法。

    我正在考虑将图书ID的“历史记录”保持在图书视图的状态,并自行管理“显示上一本书或弹出图书视图”的逻辑。

    我错过什么了吗?有更简单的解决方案吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Francesco Mineo    7 年前

    您可以将用户看到的书籍的ID存储在列表中并使用 WillPopScope 将看到的最后一本书的id传递给视图。因此,当用户单击“后退”按钮而不是弹出页面时,您将返回相同的页面,但将上一本书的id传递给它。