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

y0u0uwnf  于 2023-01-06  发布在  Flutter
关注(0)|答案(2)|浏览(369)

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

除了可跟踪性(您也可以通过Cubit中适当的日志记录来实现)和高级事件转换(我想不出Cubit不能做的任何“高级”事件转换,因为总有一种方法可以用Cubit来做。如果您使用的是干净的架构,域/数据层可以帮助您处理复杂的数据操作)。

分享和寻找活动

这些是我正在寻找的应该可以用Bloc来做的事情,因为这些事情实际上不能用Cubit来做。然而,看起来这些是不可能的(或者是吗?),因为在Bloc上添加事件需要您识别事件将被添加到的实际Bloc。bloc.add(YourEvent())
此外,事件共享在某种程度上是有争议的,因为这可能导致糟糕的架构/难以维护。
对于事件源,我在文档中找不到这是否可能(返回到特定的过去状态?)
我错过什么了吗?

wgeznvg7

wgeznvg71#

据我所知,当你有不可变的状态时,无论它是块还是肘,都可以很容易地恢复到过去的状态。有了不可变的状态,你就可以存储状态列表,并在需要某个特定状态时恢复。
区块与肘节相比没有什么优势,只是用途不同。肘节中有动作=〉响应(函数=〉状态),而区块中有流。
“腕尺不能做什么?"
例如,当使用块(since bloc 7.20)时,可以同时处理两个事件,但不能同时调用cubit上的两个函数。

共享事件

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

class MyBlocA extends Bloc<MyEvents, StatesA>

class MyBlocB extends Bloc<MyEvents, StatesB>

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

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

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

pdsfdshx

pdsfdshx2#

Bloc s和Cubit s在状态管理方面是相同的,仅有状态突变的一个差别:Bloc是事件驱动的,Cubit是方法驱动的。
除此之外,在架构方面到目前为止没有太大的不同。所有其他的都在上面的@chris中精确地提到了。如何以一种我们可以管理的方式维护状态取决于开发人员。

相关问题