如何从Firebase子集合中获取userName字段数据?
解决Firebase Firestore子集合字段获取问题
我有一个名为room的Firebase集合,该集合下存在一个名为users的文档,此文档内部包含一个同样名为users的子集合,子集合中的文档包含userName字段,我希望获取该字段的数据。
Firestore结构截图



尝试的代码
StreamBuilder( stream: FirebaseFirestore.instance.collection(widget.roomId).doc("users").collection("users").snapshots(), builder: (context, newSnapshot){ final documents = newSnapshot.data?.docs; if (newSnapshot.connectionState == ConnectionState.waiting){ return Text("WAITING"); } return ListView.builder( itemCount: documents?.length, itemBuilder: (context, index) => Container( height: 25, child: Text(documents![index]["usersName"] ?? "nothing found"), )); }, ),
问题修正与优化
你的代码核心问题是字段名拼写错误:你要获取的是userName,但代码里写成了usersName,修正字段名即可正常读取数据。此外,优化空值处理逻辑,避免强制解包带来的崩溃风险:
StreamBuilder<QuerySnapshot>( stream: FirebaseFirestore.instance .collection(widget.roomId) .doc("users") .collection("users") .snapshots(), builder: (context, newSnapshot) { // 加载中状态 if (newSnapshot.connectionState == ConnectionState.waiting) { return const Text("WAITING"); } // 无数据或错误状态 if (!newSnapshot.hasData || newSnapshot.data!.docs.isEmpty) { return const Text("暂无数据"); } final documents = newSnapshot.data!.docs; return ListView.builder( itemCount: documents.length, itemBuilder: (context, index) { final userDoc = documents[index]; // 安全获取userName字段,设置默认值 final userName = userDoc.get("userName", defaultValue: "未命名"); return Container( height: 25, child: Text(userName), ); }, ); }, ),
内容的提问来源于stack exchange,提问作者Anupriya
相关产品推荐
相关产品推荐

