Flutter 颤振-倾听来自其他集团的集团状态

Flutter 颤振-倾听来自其他集团的集团状态,flutter,flutter-bloc,Flutter,Flutter Bloc,你好,我在听其他阵营的阵营状态。 我正在使用这个软件包 从myUserBloc我想要监听AuthBloc,当它具有状态AuthenticationAuthenticated时,UserBloc应该触发一个事件 final UserRepository userRepository; final authBloc; StreamSubscription authSub; UserBloc({ @required this.userRepository, @required this.authBlo

你好,我在听其他阵营的阵营状态。 我正在使用这个软件包

从myUserBloc我想要监听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是AuthenticationAuthenticated返回总是false


有什么方法可以听其他Bloc类的blocState吗?

要回答Sampir的问题,是的,你是对的,但有时你可能想用另一种方式来做。 集团是为其他人管理事件的东西。如果您正在处理ui事件,则您的bloc将为您的ui管理这些事件,但如果您同时处理其他类型的事件(即位置事件或其他streams事件),则您可以拥有一个管理ui事件的bloc和另一个管理其他类型事件的bloc(即蓝牙连接)。因此,第一组必须侦听第二组(即,因为正在等待建立蓝牙连接)。想想一个应用程序,它使用了很多传感器,每个传感器都有自己的数据流,你会有一系列需要合作的群体。 您可以使用多提供商和多侦听器来实现这一点,但您的链可能很长,编写侦听器案例可能很困难,或者您可能想在ui中隐藏它,或者您想在应用程序的另一部分中重用它,因此您可能想在您的组内构建链

几乎在任何地方都可以将侦听器添加到一个组中。使用StreamSubscription,您可以将侦听器添加到每种流,甚至是另一个组中的流。集团必须有一个方法来暴露他的信息流,这样你才能听他的

一些代码(我使用flatter\u bloc-flatter\u bloc有多个提供者,但这只是一个示例):

类BlocA扩展了Bloc{
最终BlocB BlocB;
流媒体订阅;
BlocA({this.blocB}){
if(blocB==null)返回;
订阅=blocB.listen((stateB){
//这里的逻辑基于StateB的不同子级
});
}
//...
}
类BlocB扩展了Bloc{
//这里是BlocB逻辑和活动
}
实际上,在其中一种情况下,他们从另一个集团(FilteredTodosBloc)监听一个集团(TodosBloc)

class FilteredTodosBloc扩展了Bloc{
最终TodosBloc TodosBloc;
流订阅到取消订阅;
FilteredTodosBloc({@required this.todosBloc}){
todosSubscription=todosBloc.listen((状态){
如果(状态为ToDoLoadSuccess){
添加(TodosUpdated((todosBloc.state为TodosLoadSuccess.todos));
}
});
}
...

您可以查看此示例的说明。

您是否做到了这一点,我正在尝试完成类似的任务。我有一个问题,我正在做与您提到的蓝牙连接相同的事情,但对于WiFi和蜂窝网络,我正在使用block,我希望此block可以侦听连接发生的变化,并重建UI,但通过这种方式,我只有一个block使用连接类,但要触发构建,我必须使用UI中的事件。我要做的是从观察连接更改的后台线程触发事件。
stateAuth = {AuthenticationAuthenticated} AuthenticationAuthenticated
   props = {_ImmutableList} size = 0
class BlocA extends Bloc<EventA, StateA> {

  final BlocB blocB;
  StreamSubscription subscription;

  BlocA({this.blocB}) {
    if (blocB == null) return;
    subscription = blocB.listen((stateB) {
      //here logic based on different children of StateB
    });
  }

  //...

}

class BlocB extends Bloc<EventB, StateB> {
   //here BlocB logic and activities
}
class FilteredTodosBloc extends Bloc<FilteredTodosEvent, FilteredTodosState> {
  final TodosBloc todosBloc;
  StreamSubscription todosSubscription;

  FilteredTodosBloc({@required this.todosBloc}) {
    todosSubscription = todosBloc.listen((state) {
      if (state is TodosLoadSuccess) {
        add(TodosUpdated((todosBloc.state as TodosLoadSuccess).todos));
      }
    });
  }
...