Kas*_*rop 2 dart flutter flutter-bloc
BLoC 模式的实现有很多版本。其中之一是 Felix Angelov 的 flutter_bloc。在其中一个社交媒体上,我发现 flutter_bloc 不是项目的好选择,应该选择另一个 BLoC 或另一个状态管理。
实际上它是一个小的标准项目,分为多个层:域、应用程序、基础设施和表示。没什么特别的。
所以抱怨错误选择的人说 flutter_bloc:
mapToState- 使用async生成器而不是流如果有人可以详细说明此声明并列出使用 flutter_bloc 的真正缺点,我将不胜感激。例如对我来说 1) 隐藏实现细节是一个优势,因为我不必直接处理 RxDart。但也许我错过了一些东西。我没有完全理解第 2 点。
flutter_bloc 通过将输入显式映射到状态来工作,否则无法工作。
我想通过“保留一个状态对象”,你的朋友意味着任何人在任何时候听 che BLoC 的实例状态都将返回相同的状态,这与使用rxDart's获得的状态相同BehaviorSubject。
我个人的看法flutter_bloc是,它在复杂场景中的局限性太大,因为它允许创建BLoC只处理一个输入和一个输出的 s。
让我向您展示我在谈论这个问题时提出的典型例子。
假设您有一个页面,在屏幕的上半部分有一个旋转木马,上面有一些卡片(假设它们是借记卡)。屏幕的后半部分显示一个标签,其中包含该卡的当前余额以及使用该卡进行的付款列表。
假设您需要从响应时间非常不同的两个不同 api 中检索这两个不同的信息(余额将比付款列表快得多)。
对于这种情况,我会使用一个BLoC:
stream卡片列表的输出sink卡片选择输入stream平衡输出stream付款清单的输出滚动轮播时,您将选择的卡片下沉,然后两个小部件(余额和列表)将侦听自己的流并根据信息加载状态和数据进行相应更新。
如果您想使用 flutter_bloc 做同样的事情,您BLoCs肯定必须将其分为三个不同的部分:
BLoC 提供卡片列表BLoC 有一张卡片作为输入,余额作为输出状态BLoC 将卡片作为输入,将支付列表作为输出状态BLoC出于单一职责和可测试性的原因,我们当然可以谈论为三个不同的信息使用三个单独的s,但是(同样,这是我非常非常个人的意见)在某些情况下,我认为将内容包装在同一页面上会更好/feature 在同一个BLoC.
另外,在某些情况下(不是这个),你必须执行 a BLoCtoBLoC通信,这意味着BLoCs 依赖于其他BLoCs (这在某些情况下让我有点害怕)
我喜欢BLoC按功能对它们进行分组。
在上面的例子中,这些都是与借记卡信息屏幕相关的东西,如果我需要导航到一些细节,我可以这样做,将所有逻辑集中到一个BLoC.
如果一个 BLoC 有一部分特征可以在其他BLoCs 中通用,我会以概括的形式提取它们BLoC并BLoC进行BLoC通信(像这样)。
请注意,由于使用flutter_bloc 强制您拥有多个BLoCs,即使它可能没有必要,您将有更高的更改必须执行BLoCtoBLoC通信。
再次,我们可以说这个答案可能有偏见,因为它代表了我的一些个人意见,所以把它当作一堆考虑而不是“法律”。我很乐意从不同意我的人那里得到一些反馈,因为我的BLoC哲学仍在进步,我经常对什么是最好的方法感到矛盾!
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |