Flutter中List<Object?>无法赋值给List<Map<String,dynamic>>的解决方法
解决Dart中Firestore数据类型不匹配问题
问题原因
你遇到的类型错误是因为默认的QuerySnapshot未指定泛型,调用doc.data()时返回的是Object?类型,导致map转换后的列表类型为List<Object?>,无法直接赋值给List<Map<String, dynamic>>。
两种解决方法
方法1:显式类型转换
在map回调里把doc.data()强制转换成Map<String, dynamic>,前提是你确定Firestore文档的数据结构确实符合该类型:
Future markSetss() async { QuerySnapshot querySnapshot = await FirebaseFirestore.instance .collection('stations') .where('norequest', isGreaterThanOrEqualTo: 5) .get(); List<Map<String, dynamic>> results = querySnapshot.docs.map((doc) => doc.data() as Map<String, dynamic>).toList(); }
方法2:使用泛型QuerySnapshot
直接指定QuerySnapshot的泛型为Map<String, dynamic>,让Firestore明确知道文档数据类型,doc.data()会直接返回正确类型,无需额外转换:
Future markSetss() async { QuerySnapshot<Map<String, dynamic>> querySnapshot = await FirebaseFirestore.instance .collection('stations') .where('norequest', isGreaterThanOrEqualTo: 5) .get(); List<Map<String, dynamic>> results = querySnapshot.docs.map((doc) => doc.data()).toList(); }
这种方式能在编译阶段就检查类型匹配,更安全,推荐使用。
内容的提问来源于stack exchange,提问作者Afthal Ad
相关产品推荐
相关产品推荐

