在一个flutter项目中,我试图从一个方法返回一个对象列表作为流。这是我的代码:
Stream<List<Flight>> getLove(String seamanId) async* {
yield* _firestore
.collectionGroup(ConstStrings.seamans)
.where(ConstStrings.uid, isEqualTo: seamanId)
.limit(1)
.snapshots()
.map((querySnapshot) {
final docref = querySnapshot.docs[0].reference;
return docref.collection(ConstStrings.flights).snapshots().map(
(snapshot) => (snapshot.docs
.map((doc) => FlightDto.fromFirestore(doc).toDomain())
.toList()),
);
});
}
但是得到以下编译错误:
返回类型'Stream<列表<航班>gt;'不是'List<航班>'
如何解决此问题?
每次调用snapshots()
方法时,它都会从数据库返回一个更新流。由于您再次调用嵌套在代码中的snapshots()
,因此您实际上返回了一个Stream<Stream<List<Flight>>>
。
为了防止这种情况,您需要从内部读取返回单个事件/快照,方法是从流中获取特定事件(例如,调用first
(,或者使用get()
而不是snapshots()
。