【问题标题】:Is it bad idea to use multiple StreamBuilders for different parts of a single screen (BLOC pattern)?将多个 StreamBuilders 用于单个屏幕的不同部分(BLOC 模式)是否是个坏主意?
【发布时间】:2021-03-18 12:06:44
【问题描述】:

用例 1:

假设我有一个显示 3 个不同列表的屏幕,List-1、List-2、List-3(显示为水平滚动列表)。

这 3 个列表是从 3 个不同的网络请求中获取的。我正在使用 BLOC 模式将所有网络请求包含在内部和 BLOC 中,然后使用流将结果反馈回页面。

现在,这是更好的方法:

  1. 使用 Single StreamBuilder 包装页面的整个状态(所有 3 个列表)并在 Bloc 中加载所有 3 个网络请求并通过流发送更新的状态。
  2. 为 3 个列表使用 3 个 StreamBuilder,监听 BLOC 中的 3 个 Stream。因此,当每个网络请求完成时,只会触发和构建相应的列表 Stream。

用例 2:

带有组件的登录页面:

  1. 用户名和密码文本字段,其中用户名显示使用 Stack 的建议列表
  2. 一个提交按钮,其中支持 CircularProgressIndicator。

使用 1 个 StreamBuilder 包装整个状态或使用 2 个 StreamBuilders 包装 1 个文本字段和 1 个 StreamBuilder 包装提交按钮。因此,如果 Loading 状态发生变化,只会重建 Button。

在一个屏幕中拥有多个 StreamBuilder 是否会导致任何权衡或性能问题?

更新:添加了另一个用例。

【问题讨论】:

    标签: flutter dart bloc clean-architecture rxdart


    【解决方案1】:

    我会使用不同的流。首先,查看“官方”bloc示例,您会发现一个页面有多个bloc,例如filtering vs list。

    在您的示例中,如果您有 3 个网络请求,您可能会以不同的时间/速度获得 3 个不同的答案。所以对于 UX,我会展示你得到了什么,而不是等待,直到最后一位被传输

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2012-01-21
      • 1970-01-01
      • 2011-10-21
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多