从另一个 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 中,我有 BlocBuilder
个 Bloc A
,
如果我直接添加事件(blocAReference.add(blockAEvent)
BlocBuilder
在状态改变时被调用),
然而,当我将事件间接添加到 Bloc A
(blocBrefrence.add(blockBEvent)
,然后在 Bloc B
的 mapEventToState
内,我将事件添加到 Bloc A
),然后BlocBuilder
未被调用(但我可以通过 print
ing 来确保事件已添加到 Bloc A
)
我正在使用 flutter_bloc
库。
我知道哪里出了问题。
除一件事外,逻辑都很好,我正在使用 injectable
库来管理依赖关系,
我将我的 Bloc A
注释为 @Injectable()
,
所以当库想要将 Bloc A
注入 Bloc B
的构造函数时,
它每次都在创建一个新的 Bloc A
实例,并且该实例与我在 BlocBuilder
中收听的实例不同(我正在收听的是小部件树的顶部,我正在使用 context.bloc<BlocA>()
查找它
)
所以有2种解法:
- 我在
Bloc A
上保留 @Injectable()
注释,但现在我不将 Bloc A
注入 Bloc B
而是发送 Bloc A
的实例每个事件都添加到 Bloc B
(即作为函数参数)
- 我从
Bloc A
中删除 @Injectable()
注释并将其替换为 @LazySingleton
以便所有使用 context.bloc<BlocA>()
的查找将使 injectable
库给我相同的结果我在所有小部件上方创建的 Bloc A
实例
我已经 bloc A
创建并提供了我应用程序的所有小部件。
我在 screen 1
中创建并提供了 Bloc B
。
Bloc B
具有对 Bloc A
的引用,并且可以将事件添加到 Bloc A
inside mapEventToState
of Bloc B
.
现在奇怪的是:
在屏幕 1 中,我有 BlocBuilder
个 Bloc A
,
如果我直接添加事件(blocAReference.add(blockAEvent)
BlocBuilder
在状态改变时被调用),
然而,当我将事件间接添加到 Bloc A
(blocBrefrence.add(blockBEvent)
,然后在 Bloc B
的 mapEventToState
内,我将事件添加到 Bloc A
),然后BlocBuilder
未被调用(但我可以通过 print
ing 来确保事件已添加到 Bloc A
)
我正在使用 flutter_bloc
库。
我知道哪里出了问题。
除一件事外,逻辑都很好,我正在使用 injectable
库来管理依赖关系,
我将我的 Bloc A
注释为 @Injectable()
,
所以当库想要将 Bloc A
注入 Bloc B
的构造函数时,
它每次都在创建一个新的 Bloc A
实例,并且该实例与我在 BlocBuilder
中收听的实例不同(我正在收听的是小部件树的顶部,我正在使用 context.bloc<BlocA>()
查找它
)
所以有2种解法:
- 我在
Bloc A
上保留@Injectable()
注释,但现在我不将Bloc A
注入Bloc B
而是发送Bloc A
的实例每个事件都添加到Bloc B
(即作为函数参数) - 我从
Bloc A
中删除@Injectable()
注释并将其替换为@LazySingleton
以便所有使用context.bloc<BlocA>()
的查找将使injectable
库给我相同的结果我在所有小部件上方创建的Bloc A
实例