Flutter从Firebase获取自动更新流报错:返回类型不匹配求助
解决Firebase流返回类型不匹配的问题
你的问题出在变量类型声明错误和不必要的async*使用上,以下是具体修正方案:
错误根源
你把users变量声明为Stream<QuerySnapshot<User?>>,但经过map(将查询快照转为List<User>)和expand(将列表展开为单个User的流)后,实际得到的是Stream<User>,类型不匹配直接触发了报错。另外,函数用了async*却没有yield语句,完全没必要用生成器语法。
修正后的代码(简洁版)
直接返回处理后的流即可:
Stream<User> getUsers(String storeLocation) { return _firestore .collection(firebase_constants.kUsersCollection) .where('storeLocation', isEqualTo: storeLocation) .snapshots() .map((querySnapshot) { return querySnapshot.docs.map((doc) { return User.fromJson(doc.data()! as Map<String, dynamic>); }).toList(); }) .expand((users) => users); }
若坚持使用async*生成器
可以通过yield*转发流:
Stream<User> getUsers(String storeLocation) async* { final Stream<User> usersStream = _firestore .collection(firebase_constants.kUsersCollection) .where('storeLocation', isEqualTo: storeLocation) .snapshots() .map((querySnapshot) { return querySnapshot.docs.map((doc) { return User.fromJson(doc.data()! as Map<String, dynamic>); }).toList(); }) .expand((users) => users); yield* usersStream; }
额外优化建议
给collection指定泛型,避免后续类型强制转换:
.collection<User>(firebase_constants.kUsersCollection)
这样doc.data()直接返回User?,可以简化fromJson的调用逻辑(需根据User类的实际情况处理null场景)。
内容的提问来源于stack exchange,提问作者Stereo
相关产品推荐
相关产品推荐

