Flutter开发报错:Stream<dynamic>无法赋值给Stream<QuerySnapshot<Object?>>类型
问题解决方法
这个报错是cloud_firestore 2.0及以上版本引入强类型安全后的常见类型不匹配问题,你的
usersStream没有声明明确的返回泛型,默认是Stream<dynamic>,和StreamBuilder要求的Stream<QuerySnapshot<Object?>>参数类型不匹配。
分步修复步骤
- 第一步:修正
usersStream的定义(在你的database.dart文件中)
原来的无泛型错误定义类似:
Stream getUsersStream() { return FirebaseFirestore.instance.collection("users").snapshots(); }
修改为明确指定泛型:
Stream<QuerySnapshot<Map<String, dynamic>>> getUsersStream() { return FirebaseFirestore.instance.collection("users").snapshots(); }
- 第二步:修正
StreamBuilder的泛型声明,和usersStream的返回类型匹配
修改你的searchUsersList代码如下:
Widget searchUsersList() { // 泛型声明要和stream返回类型完全匹配 return StreamBuilder<QuerySnapshot<Map<String, dynamic>>>( stream: usersStream, builder: (context, snapshot) { return snapshot.hasData ? ListView.builder( shrinkWrap: true, itemCount: snapshot.data!.docs.length, itemBuilder: (context, index) { // 可选:给DocumentSnapshot也加泛型,避免后续读取字段的类型警告 DocumentSnapshot<Map<String, dynamic>> ds = snapshot.data!.docs[index]; return Image.network(ds["imgUrl"]); }, ) : const Center( child: CircularProgressIndicator(), ); }, ); }
你之前尝试删除
StreamBuilder的QuerySnapshot泛型的操作不可行,删除后snapshot.data会被推断为Object类型,原生Object没有docs属性,自然会触发新的报错。
内容的提问来源于stack exchange,提问作者Kanta Yamada
相关产品推荐
相关产品推荐

