Flutter:如何获取单个Firestore文档中的字段总数量
解决方法
DocumentSnapshot本身未提供直接获取字段数量的API,你需要先将文档内容转换为Dart Map类型,再通过Map的length属性获取字段总数。
代码修正点
- 修正变量笔误:你定义的流变量名为
_Shop,StreamBuilder中传入的_ShopStream需要统一变量名 - 修正长度获取逻辑:调用
DocumentSnapshot的data()方法拿到文档内容,强转为Map后取length值 - 修正列表遍历逻辑:将Map的键值对转为列表后,再按索引对应渲染内容,无法直接用数字索引访问
DocumentSnapshot
修正后完整代码
final Stream<DocumentSnapshot<Map<String, dynamic>>> _shopStream = FirebaseFirestore.instance .collection('shop') .doc('banana') .snapshots(); StreamBuilder<DocumentSnapshot>( stream: _shopStream, builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center( child: CircularProgressIndicator(), ); } if (!snapshot.data!.exists) { return Center( child: Text( 'Not Available !'.tr, style: const TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black), ), ); } // 转Map获取字段总数 final Map<String, dynamic> docData = snapshot.data!.data() as Map<String, dynamic>; // 把所有键值对转成列表方便遍历 final docEntries = docData.entries.toList(); return ListView.builder( itemCount: docEntries.length, itemBuilder: (context, int index) { final entry = docEntries[index]; return ListTile( // 示例是取当前字段对应的值里的name属性,可根据业务调整 title: Text(entry.value['name'].toString()), ); }, ); } )
补充说明
上述方法获取的是文档顶层字段的总数量,如果你需要统计嵌套字段的总数量,需要递归遍历Map自行统计。
内容的提问来源于stack exchange,提问作者Khalifa Alkhatri
相关产品推荐
相关产品推荐

