1

我有一个基本的颤振应用程序,有 2 页和 1 个块。

  • 主页显示用户列表(只有2个属性)
  • 单击用户项目时,详细信息页面会显示所有属性

使用发出 2 个状态的块来获取用户数据

  • 来自 api domain.com/users 的 AllUsersLoadedState
  • 来自 api domain.com/users/id 的 UserLoadedState

因为当我导航到详细信息页面并点击后退按钮时,主页和详细信息页面在其 BlocBuilder 中使用相同的块,所以主页崩溃了。

有什么方法可以在不编写 2 个单独的块的情况下处理它?

4

2 回答 2

0

我弄清楚了问题所在。因为两个页面都使用相同的块,所以它们将在两个状态上重建,而预期的行为是主页仅在 AllUsersLoadedState 上重建,详细信息页面仅在 UserLoadedState 上重建。

因此,当我导航到详细信息页面并收到 UserLoadedState 时,主页不知道如何处理该状态并会崩溃。

解决方案是使用 bloc 构建器中的条件参数来跳过不需要的状态的重建。

于 2020-04-04T12:23:54.277 回答
0

如果您想在屏幕之间共享一个 BLoC,那么您应该以这样一种方式创建 BLoC,即当这两个屏幕处于活动状态时它不会被破坏。

这样做的一种方法是使用Provider包提供 BLoC,或者作为InheritedWidget. 如果您Provider在每个屏幕上使用 then 您只需使用Provider.of<MyBloc>(context). 您将不得不阅读更多关于Provider学习如何使用它。

另一种方法是将 BLoC 作为变量传递给小部件的构造函数。

于 2020-03-27T01:27:42.220 回答