简体   繁体   中英

how to get multiple streams based on the same stream controller in flutter?

I have a Bloc class that needs three streams based on the same stream controller.

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));}

it's a list of to-dos which have states. I'd like to retrieve the to-dos with an active state in a stream separate from the one that retrieves the other states.

I have a method that's responsible for the filtering and returns a stream depending on the filter value. here's the method:

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;
}

later to be used in a widget like the following:

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

the snapshot is empty so far. how can i filter my original stream and return different ones depending on the filter applied to that stream?

A StreamController.broadcast() creates a stream that can have multiple listeners.

See https://www.dartlang.org/tutorials/language/streams#broadcast-streams

The details of switching between the different filtered streams depends on context not provided in the question.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM