Flutter中如何从Firestore返回的List<Object?>里分别获取字段名和字段值
解决方案
Firestore的DocumentSnapshot.data()方法默认返回Map<String, dynamic>类型,你获取的List<Object?>本质是由多个文档对应的Map组成的列表,按如下方式即可分别提取字段名和字段值:
完整修改后的代码示例
StreamBuilder<QuerySnapshot>( stream: videoProvider, builder: (context, snapshot) { if (snapshot.hasData) { List<String> fieldNameList = []; List<String> fieldValueList = []; for (var doc in snapshot.data!.docs) { // 强制转换为Map类型,明确键值结构 Map<String, dynamic> docData = doc.data() as Map<String, dynamic>; // 遍历当前文档所有字段,分别存入对应列表 docData.forEach((fieldName, fieldValue) { fieldNameList.add(fieldName); fieldValueList.add(fieldValue.toString()); }); } // 若每个文档仅含1个字段,可直接通过以下方式获取单组字段名+值 // String fieldName = fieldNameList.first; // String fieldValue = fieldValueList.first; // 此处替换为你的实际布局逻辑 return const SizedBox.shrink(); } // 数据加载中状态 return const CircularProgressIndicator(); } )
逻辑说明
- 遍历查询快照返回的所有文档,将每个文档的数据源强制转换为
Map<String, dynamic>类型 - 调用Map的
forEach方法即可遍历所有键值对,其中键对应字段名,值对应字段值 - 可以根据实际业务需求,将提取到的字段名和值存入全局变量或者直接用于界面渲染
内容的提问来源于stack exchange,提问作者Luqman Tuke
相关产品推荐
相关产品推荐

