你好,我正在尝试从其他块监听块的状态。我正在使用这个包https://pub.dev/packages/bloc
从我的UserBloc我要侦听AuthBloc,当它具有状态AuthenticationAuthenticated时,UserBloc应触发事件。
final UserRepository userRepository;
final authBloc;
StreamSubscription authSub;
UserBloc({ @required this.userRepository, @required this.authBloc}) {
authSub = authBloc.listen((stateAuth) {
//here is my problem because stateAuth, even is AuthenticationAuthenticated it return always false.
if (stateAuth is AuthenticationAuthenticated) {
this.add(GetUser()) ;
}
});
}
@override
Future<void> close() async {
authSub?.cancel();
super.close();
}
眼下我有这样的问题:在调试中,我尝试打印stateAuth时,它返回:
stateAuth = {AuthenticationAuthenticated} AuthenticationAuthenticated
props = {_ImmutableList} size = 0
但是stateAuth是AuthenticationAuthenticated返回的总是false。
有没有办法从其他Bloc类监听blocState?
5条答案
按热度按时间o7jaxewo1#
对于那些不想扰乱欧盟的人来说,
我们可以使用这个库
Event Bus
。它是基于流的。我们可以从屏幕之间的任何地方触发和监听事件。nle07wnf2#
实际上在其中一个examples的bloc library中它们监听一个Bloc(TodosBloc)来自另一个Bloc(FilteredTodosBloc)。
您可以查看此示例的说明here。
ckocjqey3#
为了回答Sampir的问题,是的,你是对的,但是有时候你可能想用另一种方式来做。一个块是为别人管理一个事件的东西。如果你正在使用ui事件,你的块为你的ui管理它们,但是如果你也在使用其他类型的事件(即位置事件,或其他流事件),您可以有一个块来管理您的ui事件,另一个块管理其他类型的事件。(即蓝牙连接)。因此,第一个块必须监听第二个块(IidoEe.因为正在等待建立蓝牙连接)想想一个应用程序,它使用了很多传感器,每个传感器都有它的数据流,你可以通过多提供者和多监听器来实现,但是你的链可能很长,编写监听器用例可能很困难,或者你可能想对你的用户界面隐藏它,或者你想在你的应用的其他部分重用它,因此您可能希望在块内构建链。
你几乎可以在任何地方添加一个监听器到一个块。使用StreamSubscription,你可以添加一个监听器到每一种流,甚至是另一个块中的流。块必须有一个方法来公开他的流,这样你就可以监听他。
一些代码(我使用flutter_bloc - flutter_bloc有多个提供者,但这只是举例):
czfnxgou4#
最近在块源代码中的更新需要对解决方案进行一个小的更改。
你现在必须监听一个块/肘的流属性,请看下面的例子。
mepcadol5#
您可能不希望您的块依赖于具有直接块到块依赖性的另一个块,相反,您可能希望通过表示层连接您的块。
您可以使用BlocListener侦听一个块,并在第一个块更改时将事件添加到另一个块。
上面的代码防止SecondBloc需要了解FirstBloc,从而鼓励松散耦合。
查看官方文档以了解更多信息。