如何在flutter中基于同一个流控制器获取多个流?

Sal*_*ma. 7 stream dart flutter bloc stream-builder

我有一个 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));}
Run Code Online (Sandbox Code Playgroud)

这是一个有状态的待办事项列表。我想在与检索其他状态的流分开的流中检索具有活动状态的待办事项。

我有一个方法负责过滤并根据过滤器值返回一个流。这是方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

稍后在小部件中使用,如下所示:

 return StreamBuilder<List<TodoModel>>(
      stream: bloc.filterTodoLs(filter),
      builder:(BuildContext context, AsyncSnapshot<List<TodoModel>> todoSnapShot) {}
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*sch 8

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

请参阅https://www.dartlang.org/tutorials/language/streams#broadcast-streams

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