Как получить несколько потоков на основе одного контроллера потока в флаттер? - PullRequest
0 голосов
/ 20 января 2019

У меня есть класс 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 Ответ

0 голосов
/ 25 января 2019

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

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

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

...