【问题标题】:Flutter share bloc between pagesFlutter 页面间共享块
【发布时间】:2020-07-06 10:28:44
【问题描述】:

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

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

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

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

当我导航到详细信息页面并单击返回按钮时,由于主页和详细信息页面在其 BlocBuilder 中使用相同的块,因此主页崩溃了。

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

【问题讨论】:

  • 您能分享一下您的活动、州和集团文件
  • 分享您的代码,后退按钮不应干扰您的案例,因为您描述的 Bloc 不依赖于导航。

标签: api flutter dart flutter-bloc


【解决方案1】:

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

这样做的一种方法是使用Provider 包或InheritedWidget 提供BLoC。如果您使用Provider,那么在每个屏幕上您只需使用Provider.of<MyBloc>(context) 询问BLoC。您必须阅读更多关于 Provider 的信息才能了解如何使用它。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2014-03-27
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多