如何保持访问同一视图的历史扑朔迷离?

时间:2018-12-22 02:49:32

标签: flutter

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

我希望使用标准的Navigator来实现此用例,类似于在实际停留在同一页面上的同时在浏览器中注册历史记录令牌的方式。有人知道这是否可能吗?

我尝试使用其他图书ID导航到同一视图:

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

,但这会导致BookView的多个副本,其中每个副本都同时调用其Build。对我来说,这就像个错误-我希望Navigator能够避免不创建同一视图的多个实例。在这种情况下,永远不会调用BookView的dispose()方法。

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

我想念什么吗?有没有更简单的解决方案?

1 个答案:

答案 0 :(得分:1)

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