Как получить несколько потоков на основе одного контроллера потока в флаттер?

У меня есть класс 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));}

это список задач, в которых есть состояния. Я хотел бы получить задачи с активным состоянием в потоке, отдельном от того, который извлекает другие состояния.

У меня есть метод, который отвечает за фильтрацию и возвращает поток в зависимости от значения фильтра. вот метод:

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

позже для использования в виджете, подобном следующему:

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

снимок пока пуст. Как я могу отфильтровать свой исходный поток и вернуть разные в зависимости от фильтра, примененного к этому потоку?

1 ответ

StreamController.broadcast() создает поток, который может иметь несколько слушателей.

См. https://www.dartlang.org/tutorials/language/streams.

Детали переключения между различными отфильтрованными потоками зависят от контекста, не предоставленного в вопросе.

Другие вопросы по тегам