Flutter类型错误:Stream<dynamic>无法赋值给Stream<QuerySnapshot<Object?>>
Flutter 中 Stream 无法赋值给 Stream<QuerySnapshot<Object?>> 的类型错误解决
问题描述
错误提示:
元素类型'Stream
'无法赋值给列表类型'Stream<QuerySnapshot<Object?>>'。
代码片段:
Stream<List<QuerySnapshot>> getData() { Stream stream1 = FirebaseFirestore.instance.collection('Gib Role').where('id', isEqualTo: 'false').orderBy('timestamp').snapshots(); Stream stream2 = FirebaseFirestore.instance.collection('Register').where('id', isEqualTo: 'true').orderBy('timestamp').snapshots(); return StreamZip([stream1,stream2]); }
错误出现在stream1和stream2的定义处,需要解决该类型不匹配问题。
解决方案
问题根源在于你没有给stream1、stream2指定具体类型,Dart默认推断为Stream<dynamic>,而StreamZip要求传入的列表元素必须是同类型的Stream<QuerySnapshot<Object?>>,以下两种方法可以解决:
方法一:显式指定流类型
直接给变量声明明确的类型,和Firestore返回的快照流类型保持一致:
Stream<List<QuerySnapshot<Object?>>> getData() { Stream<QuerySnapshot<Object?>> stream1 = FirebaseFirestore.instance.collection('Gib Role').where('id', isEqualTo: 'false').orderBy('timestamp').snapshots(); Stream<QuerySnapshot<Object?>> stream2 = FirebaseFirestore.instance.collection('Register').where('id', isEqualTo: 'true').orderBy('timestamp').snapshots(); return StreamZip([stream1, stream2]); }
方法二:利用Dart类型推断简化代码
省略变量的类型声明,Dart会根据右侧Firestore方法的返回值自动推断出正确的Stream<QuerySnapshot<Object?>>类型,代码更简洁:
Stream<List<QuerySnapshot<Object?>>> getData() { final stream1 = FirebaseFirestore.instance.collection('Gib Role').where('id', isEqualTo: 'false').orderBy('timestamp').snapshots(); final stream2 = FirebaseFirestore.instance.collection('Register').where('id', isEqualTo: 'true').orderBy('timestamp').snapshots(); return StreamZip([stream1, stream2]); }
同时注意将返回值类型调整为Stream<List<QuerySnapshot<Object?>>>,和内部流的类型保持统一,避免潜在的类型警告。
内容的提问来源于stack exchange,提问作者divya manickam
相关产品推荐
相关产品推荐

