如何在Flutter中通过指定文档ID获取Firestore集合快照
代码修改方案
场景1:获取单个指定ID的文档
你当前代码返回整个集合所有文档的原因是直接调用了集合的snapshots()方法,没有指定目标文档ID,按以下步骤修改即可:
- 修改Stream数据源,通过
doc(目标文档ID)方法指定你要查询的文档ID,同时将StreamBuilder的泛型从QuerySnapshot改为DocumentSnapshot - 调整builder内部的取值逻辑,适配单文档的数据结构
请将代码中的占位文档ID替换为你实际需要查询的ID值
修改后完整代码如下:
StreamBuilder<DocumentSnapshot>( stream: FirebaseFirestore.instance.collection('types').doc('你的目标文档ID').snapshots(), builder: (context, snapshot2) { if (snapshot2.hasData) { final document = snapshot2.data!; return DropdownButtonFormField( value: shopId, isDense: true, onChanged: (val) => setState(() => shopId = val as String?), // 单文档场景下下拉框只有对应文档的一个选项 items: [ DropdownMenuItem<String>( child: Text(document.get('type')), value: document.get('type'), ) ], ); } else if (snapshot2.hasError) { return const Text('加载数据出错'); } else { return const Text('加载中...'); } } )
场景2:获取多个指定ID的文档
如果你需要筛选出集合中若干个指定ID的文档,使用where条件匹配文档ID即可,无需修改泛型和原有取值逻辑,仅修改stream部分:
stream: FirebaseFirestore.instance.collection('types') .where(FieldPath.documentId, whereIn: ['文档ID1', '文档ID2', '文档ID3']) // 替换为你需要的文档ID列表 .snapshots(),
内容的提问来源于stack exchange,提问作者afreeman
相关产品推荐
相关产品推荐

