使用flutter_bloc库的缺点是什么

f45qwnt8  于 2023-04-13  发布在  Flutter
关注(0)|答案(1)|浏览(109)

BLoC模式的实现有很多版本。其中之一是Felix Angelov的flutter_bloc。在其中一个社交媒体上,我遇到了一个声明,即flutter_bloc对于该项目来说不是一个好的选择,应该选择另一个BLoC或另一个状态管理。
实际上,它是一个小型的标准项目,分为几个层次:领域、应用程序、基础设施和表示。
所以那个抱怨错误选择的家伙是在说flutter_bloc:
1.隐藏实施详细信息
1.保留一个状态对象(为什么,如果它是真正的功能,那么你不会这样做),
1.表示使用mapToState的首选方式-使用async生成器而不是流
如果有人能详细说明这句话并列出使用flutter_bloc的真实的缺点,我将非常感激。例如,对我来说,第1点)隐藏实现细节是一个优点,因为我不必直接处理RxDart。但也许我错过了一些东西。我没有完全理解第2点。

rbl8hiat

rbl8hiat1#

flutter_bloc通过显式地将输入Map到状态来工作,否则无法工作。
我想你的朋友说的“Retains a state object”是指任何监听BLoC示例状态的人都会得到相同的状态,这和使用rxDartBehaviorSubject得到的状态是一样的。
我个人对flutter_bloc的看法是,它在复杂场景中的限制太大,因为它允许创建只处理一个输入和一个输出的BLoC
让我给你们看一个典型的例子。
假设你有一个页面,在屏幕的上半部分有一个旋转木马,上面有一些卡(假设这些是借记卡),屏幕的下半部分显示一个标签,上面有卡的当前余额和使用该卡进行的支付的列表。
假设您需要从两个不同的api中检索这两条不同的信息,它们的响应时间非常不同(余额将比支付列表快得多)。
在这种情况下,我将使用一个BLoC

  • 输出stream用于卡片列表
  • 输入sink进行卡片选择
  • 平衡输出stream
  • 付款列表的输出stream

当滚动carousel时,您接收所选的卡片,然后两个小部件(balance和list)将侦听它们自己的流并根据信息加载状态和数据进行更新。
如果你想用flutter_bloc做同样的事情,你必须把它分成三个不同的BLoCs

  • BLoC提供卡片列表
  • BLoC,以卡作为输入,余额作为输出状态
  • BLoC,以卡片作为输入,以支付列表作为输出状态

出于单一责任和可测试性的原因,我们当然可以讨论为三个不同的信息设置三个单独的BLoC,但是(再次强调,这是我非常非常个人的观点)在某些情况下,我认为最好将相同页面/功能的内容 Package 在同一个BLoC中。
另外,在某些情况下(不是这个),您必须执行BLoCBLoC的通信,这意味着BLoC依赖于其他BLoC(在某些情况下这有点让我害怕)
我喜欢将我的BLoC结构化,按功能将它们分组。
在上面的例子中,这些都是与借记卡信息屏幕相关的内容,如果我需要导航到一些细节,我可以这样做,将所有逻辑集中到一个BLoC中。
如果一个BLoC有一部分特性可以在其他BLoC中通用,我会将它们提取到一个通用的BLoC中,并使用BLoCBLoC通信(如this)。
请注意,由于使用flutter_bloc * 强制 * 您拥有多个BLoC,即使可能不需要,您将不得不执行BLoCBLoC的通信。
再一次,我们可以说这个答案可能是有偏见的,因为它包含了我的一些个人观点,所以把它当作一堆考虑因素,而不是“法律”。我很乐意收到任何不同意我的人的反馈,因为我的BLoC哲学仍然在进步,我经常对什么是最好的方法感到矛盾!

相关问题