Как получить несколько потоков на основе одного контроллера потока в флаттер?
У меня есть класс 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.
Детали переключения между различными отфильтрованными потоками зависят от контекста, не предоставленного в вопросе.