从另一个 bloc 内部向该 bloc 添加事件时,不会调用 BlocBuilder 的构建方法

BlocBuilder's build method is not invoked when adding an event to this bloc from inside another bloc

我已经 bloc A 创建并提供了我应用程序的所有小部件。

我在 screen 1 中创建并提供了 Bloc B

Bloc B 具有对 Bloc A 的引用,并且可以将事件添加到 Bloc A inside mapEventToState of Bloc B.

现在奇怪的是:

在屏幕 1 中,我有 BlocBuilderBloc A

如果我直接添加事件(blocAReference.add(blockAEvent) BlocBuilder 在状态改变时被调用),

然而,当我将事件间接添加到 Bloc AblocBrefrence.add(blockBEvent),然后在 Bloc BmapEventToState 内,我将事件添加到 Bloc A),然后BlocBuilder 未被调用(但我可以通过 printing 来确保事件已添加到 Bloc A

我正在使用 flutter_bloc 库。

我知道哪里出了问题。

除一件事外,逻辑都很好,我正在使用 injectable 库来管理依赖关系,

我将我的 Bloc A 注释为 @Injectable(),

所以当库想要将 Bloc A 注入 Bloc B 的构造函数时,

它每次都在创建一个新的 Bloc A 实例,并且该实例与我在 BlocBuilder 中收听的实例不同(我正在收听的是小部件树的顶部,我正在使用 context.bloc<BlocA>() 查找它 )

所以有2种解法:

  1. 我在 Bloc A 上保留 @Injectable() 注释,但现在我不将 Bloc A 注入 Bloc B 而是发送 Bloc A 的实例每个事件都添加到 Bloc B(即作为函数参数)
  2. 我从 Bloc A 中删除 @Injectable() 注释并将其替换为 @LazySingleton 以便所有使用 context.bloc<BlocA>() 的查找将使 injectable 库给我相同的结果我在所有小部件上方创建的 Bloc A 实例