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
Dart 如何在颤振中基于同一流控制器获得多个流?_Dart_Stream_Flutter_Bloc_Stream Builder - Fatal编程技术网

Dart 如何在颤振中基于同一流控制器获得多个流?

Dart 如何在颤振中基于同一流控制器获得多个流?,dart,stream,flutter,bloc,stream-builder,Dart,Stream,Flutter,Bloc,Stream Builder,我有一个Bloc类,它需要基于同一个流控制器的三个流 class TodoBloc { final _todoController = StreamController<List<TodoModel>>(); get allTodoStream => _todoController.stream; get activeTodoStream => _todoController.stream .map<List<

我有一个Bloc类,它需要基于同一个流控制器的三个流

class TodoBloc {

  final _todoController = StreamController<List<TodoModel>>();

  get allTodoStream => _todoController.stream;

  get activeTodoStream => _todoController.stream
          .map<List<TodoModel>>(
              (list) => list.where((item) => item.state == 0));

  get completedTodoStream => _todoController.stream
          .map<List<TodoModel>>(
              (list) => list.where((item) => item.state == 1));}
类TodoBloc{
final _todoController=StreamController();
get allTodoStream=>\u todoController.stream;
获取activeTodoStream=>\u todoController.stream
.地图(
(list)=>list.where((item)=>item.state==0));
get completedTodoStream=>\u todoController.stream
.地图(
(list)=>list.where((item)=>item.state==1));}
这是一个有状态的待办事项列表。我想在一个独立于检索其他状态的流中检索具有活动状态的待办事项

我有一个方法负责过滤并根据过滤值返回流。方法如下:

Stream<List<TodoModel>> filterTodoLs(String filter) {
    if (filter == 'all') {
      return todoStream;
    } else if (filter == 'completed') {
      return completedStream;
    } else if (filter == 'active') {
      return activeStream;
    }
    return todoStream;
}
流过滤器路径(字符串过滤器){
如果(过滤器=='all'){
返回到目标团队;
}如果为else(筛选器=‘已完成’){
返回完成流;
}如果为else(筛选器=‘活动’){
返回活动流;
}
返回到目标团队;
}
稍后将在如下小部件中使用:

 return StreamBuilder<List<TodoModel>>(
      stream: bloc.filterTodoLs(filter),
      builder:(BuildContext context, AsyncSnapshot<List<TodoModel>> todoSnapShot) {}
返回StreamBuilder(
流:bloc.filterTodoLs(过滤器),
生成器:(BuildContext上下文,AsyncSnapshot-todoSnapShot){}

快照到目前为止为空。如何筛选原始流并根据应用于该流的筛选器返回不同的流?

A
StreamController.broadcast()
创建一个可以有多个侦听器的流


在不同过滤流之间切换的详细信息取决于问题中未提供的上下文。

您可能希望使用BehaviorSubject而不是StreamController。如果我将一个小部件包装在streambuilder中并附加到一个流,并说我在多个位置使用同一个小部件,但单个小部件的更改会更新,该怎么办对于所有小部件,因为它们都在侦听同一个流如何使同一个小部件侦听不同的流我已经知道了,必须创建该类的单个实例来创建唯一的流