【发布时间】:2020-04-11 01:44:12
【问题描述】:
我正在尝试从集合中查询一些文档,这个查询应该监听查询文档中所做的更改,所以我需要一个流。我正在关注(在 Dart/Flutter 中)
Stream<List<MatchRequest>> _getNewMatches() {
return Collection<MatchRequest>(path: 'requests')
.ref
.where('status', isNull: true)
.where('users', arrayContains: ['$currentUid'])
.orderBy('last_activity')
.snapshots()
.map((list) => list.documents.map(
(doc) => Global.models[MatchRequest](doc.data) as MatchRequest));
}
(对象 Collection 在其构造函数中设置 ref 的路径,例如:ref = db.collection($path) 并且 map 对结果进行模型)
然后我使用带有stream 的StreamBuilder 调用上面的方法并builder 检查snapshot.hasData。但它一直在加载,snapshot.hasData 一直是假的。我在这里做错了什么?
编辑:
-
我的 Firestore 安全规则包含:
match /requests/{requestId} { allow read: if isLoggedIn(); allow write: if isLoggedIn(); } 删除每个
where和orderBy时,它也找不到任何东西。并且请求集合中存在文档当尝试从请求集合中仅查询 1 个文档作为流时,他确实找到了结果
是因为我应该向我的 Firestore 索引添加索引吗?但这并不能解决我的第一个问题,即即使没有
where和orderBy,它也没有得到任何数据
【问题讨论】:
-
您的第一个问题可能是在您共享的代码上您没有听到任何内容。您有 snapshots() 但之后没有 listen() 。能够监听 Firestore 集合与索引无关,因此您无需担心。
标签: firebase flutter google-cloud-firestore stream