firebase - Firestore 使用 Flutter 合并 2 个查询
问题描述
我正在尝试对 Firestore 进行 2 个查询并将结果合并为一个以模拟 Firestore OR 查询。
我根据 bloc 模式对代码进行了分段。
///private method to zip QuerySnapshot streams
Stream<List<QuerySnapshot>> _combineStreams(String userId) {
var stream1 = todosCollection
.where("owners", arrayContains: userId)
.snapshots();
var stream2 = todosCollection
.where("contributors", arrayContains: userId)
.snapshots();
return StreamZip(([stream1, stream2])).asBroadcastStream();
}
///exposed method to be consumed by repository
Stream<List<Todo>> todos(String userId) {
var controller = StreamController<List<Todo>>();
_combineStreams(userId).listen((snapshots) {
List<DocumentSnapshot> documents = List<DocumentSnapshot>();
snapshots.forEach((snapshot) {
documents.addAll(snapshot.documents);
});
final todos = documents.map((doc) {
return Todo.fromEntity(TodoEntity.fromSnapshot(doc));
}).toList();
controller.add(todos);
});
return controller.stream;
}
在我的集团中,我有以下代码应该相应地更新我的视图我的数据库状态,但它不起作用。数据库插入工作,但视图不刷新,我不知道为什么。
_gardensSubscription?.cancel();
_gardensSubscription = _dataRepository.gardens(event.userId).listen(
(gardens) {
dispatch(
GardensUpdated(gardens),
);
},
);
我对 Stream 尤其是 StreamController 进程不太满意。是否可以更轻松地完成这项任务?
解决方案
推荐阅读
- java - ConcurrentHashMap 中的 size() 和 mappingCount() 有什么区别?
- angular - 单击任何卡片时,在卡片的网格布局中插入额外的 div
- regex - notepad ++正则表达式查找和替换仅获取单词的最后一个字母而不是整个组
- c# - IRequestHandler 返回无效
- javascript - 具有固定侧边栏布局的 NuxtJs nuxt-link 滚动行为
- azure - 断开 Azure VM 与 loganalytics 工作区的连接
- arrays - 声明可以包含泛型值的数组?
- c# - 从文件 C# 排序和读取 JSON 时提高性能
- javascript - 删除 addEventListener 调用的函数中的 eventHandler
- apache-spark - 火花数减去预览时相同的数