如何解决CombineLatestStream 似乎忘记了旧值
我正在尝试侦听 Cloud Firestore
上的两个集合并将结果组合成单个对象的流。我正在使用 rxdart
的 CombineLatestStream.combine2
来完成此操作。
Stream<AllRatings> get allRatings {
Stream<List<Rating>> ratingsIn =
ratingsInCollection.snapshots().map(ratingListFromSnapshot);
Stream<List<Rating>> ratingsOut =
ratingsOutCollection.snapshots().map(ratingListFromSnapshot);
return CombineLatestStream.combine2(ratingsIn,ratingsOut,(rIn,rOut) => AllRatings(rIn as List<Rating>,rOut as List<Rating>));
}
// function for mapping snapshots into rating objects
List<Rating> ratingListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.docs.map((doc) => Rating.fromDoc(doc)).toList();
}
这适用于第一个构建。当我更新 ratingsOut
集合时,问题就出现了。流从 ratingsOut
获取新值;然而,它似乎忘记了旧的 ratingsIn
值,而是为 []
返回 ratingsIn
。根据我对 CombineLatestStream
的理解,这不应该发生。
预期行为:
ratingsInStream => ---in1------------------------
ratingsOutStream => ---out1-----------out2--------
combinedStream => ---[in1,out1]-----[[],out2]---
实际行为:
ratingsInStream => ---in1------------------------
ratingsOutStream => ---out1-----------out2--------
combinedStream => ---[in1,out2]---
其中 in1 和 out1 表示评分列表(特别是每个评分列表),out2 是 out1,其中修改了 out1 内的评分。
我不确定这是否重要,但整个流是在 StreamProvider
包中的 Provider
中处理的。这可能不是问题的原因,因为我从 AllRatings 构造函数中检测到了意外行为(我在那里有一个打印语句,用于打印提供给构造函数的评级列表)。
此外,我能够通过分离流和使用单独的流提供程序来实现这一点。虽然这个功能,我想结合流。如果有人知道 rxdart
的替代方案,我也不会反对该选项。
关于如何让人们回答的任何建议也很有用(例如重新表述在另一个网站上寻找建议的问题)。我之所以这么说,是因为这个问题似乎与本网站上的答案相悖。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。