【发布时间】:2019-06-14 02:42:07
【问题描述】:
我有一个 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) {}
目前快照为空。如何过滤原始流并根据应用于该流的过滤器返回不同的流?
【问题讨论】:
-
您需要使用 BehaviorSubject 而不是 StreamController。
标签: dart stream flutter bloc stream-builder