Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振,在一个团中使用一个团_Flutter_Dart_Bloc_State Management_Flutter Bloc - Fatal编程技术网

Flutter 颤振,在一个团中使用一个团

Flutter 颤振,在一个团中使用一个团,flutter,dart,bloc,state-management,flutter-bloc,Flutter,Dart,Bloc,State Management,Flutter Bloc,我有两个集团。 EstateBloc 地产集团 我的应用程序基本上从API中获取属性,并以类似的方式显示它们 现在我想添加一个排序功能,但我只能通过特定的状态访问遗产列表 if(当前状态为后加载状态){{ 打印(currentState.estates); } 我想为需要这份名单的任何一个集团提供这份名单 我所做的是,我创建了EstateTryBloc,它基本上包含作为一个州的地产列表 class EstateTryBloc扩展了Bloc{ @凌驾 列表获取初始状态=>[]; @凌驾 流映

我有两个集团。

  • EstateBloc
  • 地产集团
我的应用程序基本上从API中获取属性,并以类似的方式显示它们

现在我想添加一个排序功能,但我只能通过特定的状态访问遗产列表

if(当前状态为后加载状态){{
打印(currentState.estates);
}
我想为需要这份名单的任何一个集团提供这份名单

我所做的是,我创建了EstateTryBloc,它基本上包含作为一个州的地产列表

class EstateTryBloc扩展了Bloc{
@凌驾
列表获取初始状态=>[];
@凌驾
流映射事件状态(
EstateTryEvent事件,
)异步*{
最终电流状态=状态;
如果(事件为AddToEstateList){
final estates=等待从源获取(currentState.length,20)
.getDataFromEitherSource();
国家+不动产;
}
}
}
当我在集团内部打印州时,我得到了房地产清单,但我不知道如何在不同的集团中使用该清单

print(estaterybloc().state);
只显示初始状态


我对各种答案都持开放态度,请随时告诉我是否采用不同的方法会更好。

目前,在集团之间共享数据的推荐方法是将一个集团注入另一个集团,并监听状态变化。因此,在您的情况下,应该是这样的:

class EstateTryBloc extends Bloc<EstateTryEvent, List<Estate>> {
  final StreamSubscription _subscription;

  EstateTryBloc(EstateBloc estateBloc) {
    _subscription = estateBloc.listen((PostState state) {
      if (state is PostLoadedState) {
        print(state.estates);
      }
    });
  }

  @override
  Future<Function> close() {
    _subscription.cancel();
    return super.close();
  }
}
class EstateTryBloc扩展了Bloc{
最终认购(股认购);;
EstateTryBloc(EstateBloc EstateBloc){
_订阅=estateBloc.listen((状态后){
如果(状态为PostLoadedState){
印刷品(州、地产);
}
});
}
@凌驾
远期交割(){
_订阅。取消();
返回super.close();
}
}
当您执行
打印(estaterybloc().state);
您正在创建一个
estaterybloc()
的新实例,这就是为什么您总是看到
初始状态而不是当前状态

要使其工作,您必须访问要获取其状态的实例的引用。例如:

final EstateTryBloc bloc = EstateTryBloc();

// Use the bloc wherever you want

print(bloc.state);

老实说,我把事情复杂化了一点,没有意识到真正的问题。 就是在我按下排序按钮时,意外地创建了一个新的EstateBloc()实例。 无论如何,谢谢你们的贡献,伙计们