Flutter BLoC - Bloc vs Cubit 事件驱动状态管理优势

标签 flutter bloc clean-architecture flutter-bloc event-driven-design

Bloc 相对于 Cubit 的实际优势是什么?

除了可追溯性(您也可以通过适当的 Cubit 日志记录来实现)和高级事件转换(我想不出任何“高级”事件Cubit 无法执行的转换,因为总有一种方法可以使用 Cubit 来完成。如果您使用的是整洁的架构,域层可以帮助进行复杂的数据操作。

分享和采购事件

这些是我正在寻找的应该能够用 Bloc 完成的事情,因为这些事情实际上不能用 Cubit 完成。但是,这些似乎是不可能的(或者是不可能的?),因为在 Bloc 上添加事件需要您确定将在其中添加事件的实际 Bloc。 bloc.add(YourEvent())

此外,事件共享也存在争议,因为这会导致糟糕的架构/难以维护。

对于事件溯源,我无法在文档中找到是否可行(回溯到特定的过去状态?)。

我是不是漏掉了什么?

最佳答案

据我所知,当你拥有不可变状态时,无论是 bloc 还是 cubit,都可以很容易地恢复到过去的状态。具有不可变状态允许您存储状态列表并在需要特定状态时恢复。

Bloc 与 cubit 相比没有优势,但目的不同。在 cubit 中你有 action=>response (function=>states) 而在 cubit 中你有流。

肘不能做什么?

例如,当使用 bloc (since bloc 7.20) 时,您可以同时处理两个事件但是你不能在 cubit 上同时调用两个函数。

分享事件

您可以在不同的 bloc 之间共享事件实现,因为您必须指定 bloc 实现的事件。

class MyBlocA extends Bloc<MyEvents, StatesA>

class MyBlocB extends Bloc<MyEvents, StatesB>

如果我没理解错的话,你想要做的是在两个不同的区 block 中处理一个事件,你不能这样做,因为事件被发送到一个特定的区 block 。所以它需要两次调用:

blocA.add(EventA);
blocB.add(EventA);

根据您的情况,您可能会在 MyBlocB 中收听 MyBlocA 的状态。这样,每当 MyblocB 的事件出现时,操作将取决于 MyBlocA 的状态。

关于Flutter BLoC - Bloc vs Cubit 事件驱动状态管理优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73268100/

相关文章:

flutter - Dart,Flutter:异常:类型 'List<dynamic>'不是强制类型转换中 'Map<String, dynamic>'类型的子类型

flutter - 如何从Bloc以编程方式改变Flutter中的Stepper?

android - 将数据从 BroadcastReceiver 发送到 ViewModel

swift - 我应该从哪里在整洁的架构中呈现 MFMailComposeViewController?

android - 整洁架构、用例和实体

Flutter 在构建小部件之前从 firestore 初始化对象

Flutter - 如何检查 SingleChildScrollView 是否适合屏幕

flutter - 动画切换器和 Bloc Builder

flutter - 在mapEventToState 中使用yield 和Either 时测试我的 block 失败

ios - Flutter:在iOS版本的YouTube应用中打开视频