StreamBuilder未返回结果:FirebaseFirestore两种查询差异原因咨询
关于Firestore StreamBuilder查询结果差异的问题
我使用StreamBuilder组件时遇到一个疑问,以下查询能正常返回结果:
FirebaseFirestore.instance .collection('messages') .doc(widget.currentUser) .collection('messages') .doc(widget.otherUser) .collection('messages') .snapshots()
该流对应的集合内文档使用自定义ID(非Firestore自动生成)。
但以下查询却无法返回结果:
FirebaseFirestore.instance .collection('messages') .doc(widget.currentUser) .collection('messages') .snapshots()
此查询对应的集合内文档使用Firestore自动生成ID,请问这一差异的原因是什么?
核心原因分析
集合路径与写入路径不匹配
你可能误将自动生成ID的文档写入了更深层的集合(比如第一个查询的messages/{currentUser}/messages/{otherUser}/messages路径),而非第二个查询指向的messages/{currentUser}/messages集合,导致目标集合无数据可返回。安全规则权限限制
检查Firestore安全规则:深层子集合可能配置了允许当前用户读取的规则,而第二个查询的集合路径未被规则覆盖,读取请求被拒绝,StreamBuilder无法获取数据。目标集合无有效文档
Firestore的集合仅在包含至少一个有效文档时才会被查询识别。如果自动生成ID的文档写入失败(比如网络异常、数据格式不符合要求),目标集合会被判定为空,snapshots()自然无结果返回。
内容的提问来源于stack exchange,提问作者and waojd
相关产品推荐
相关产品推荐

