使用多个侦听器组合的flutter Firestore实时分页
我想从Firestore数据库创建一个使用Bloc的分页屏幕。屏幕应更新文档更改。
我的firestoreProviderapi
从BLOC单位接收提取请求。从Firestore获取文档后,它将它们使用stream
将其发送回群众。
firestoreProviderapi
:
final _pollOverviewStreamController = BehaviorSubject<QuerySnapshot>();
@override
Stream<QuerySnapshot> getOverviewPolls<QuerySnapshot>() =>
_pollOverviewStreamController.asBroadcastStream().cast();
@override
Future<void> fetchFirstOverviewPolls() async {
_overviewPollsRef.limit(5).snapshots().listen((querySnapshot) {
_pollOverviewStreamController.add(querySnapshot);
});
}
@override
Future<void> fetchNextOverviewPolls() async {
if (_pollOverviewStreamController.value.docs.isEmpty) return;
final lastDoc = _pollOverviewStreamController.value.docs.last;
_overviewPollsRef
.startAfterDocument(lastDoc)
.limit(5)
.snapshots()
.listen((querySnapshot) {
_pollOverviewStreamController.add(querySnapshot);
});
}
在文档更改中,我想更新文档列表。
目前,每当发生更改时,就会将新的QuerySnapshot附加到流(而不是更换旧的)上。 是否有一种方法可以将多个听众组合到同一流,仅汇总最新数据?
I want to create a pagination screen, using Bloc, from the Firestore database. The screen should update on document changes.
My FirestoreProviderApi
receives fetch requests from the Bloc unit. After fetching the documents from Firestore, it sends them back to the Bloc using a Stream
.
The FirestoreProviderApi
:
final _pollOverviewStreamController = BehaviorSubject<QuerySnapshot>();
@override
Stream<QuerySnapshot> getOverviewPolls<QuerySnapshot>() =>
_pollOverviewStreamController.asBroadcastStream().cast();
@override
Future<void> fetchFirstOverviewPolls() async {
_overviewPollsRef.limit(5).snapshots().listen((querySnapshot) {
_pollOverviewStreamController.add(querySnapshot);
});
}
@override
Future<void> fetchNextOverviewPolls() async {
if (_pollOverviewStreamController.value.docs.isEmpty) return;
final lastDoc = _pollOverviewStreamController.value.docs.last;
_overviewPollsRef
.startAfterDocument(lastDoc)
.limit(5)
.snapshots()
.listen((querySnapshot) {
_pollOverviewStreamController.add(querySnapshot);
});
}
On document changes, I want to update my list of documents.
Right now, whenever a change occurs, a new QuerySnapshot is appended to the Stream (instead of replacing the old one).
Is there a way to combine multiple listeners to the same Stream, aggregating only the most up-to-date data?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题解决了。
我找到了如何实施真实的文档 - 使用Firestore的时间分页(已实现,工作就像魅力一样)。
YouTube实现: flutter和flutter and firestore实时分页。
高级步骤:
我的实施:
使用订单
注意,如果您使用
orderby
在查询快照时,对订单字段的任何更新都会导致整个列表的重新排序项目。此外,在某些情况下,它将自动获取更多的项目(由于我们使用每个快照的限制,并且重新排序项目列表,因此某些快照可能需要获取更多项目来填补其限制)。Issue solved.
I found good documentation of how to implement real-time pagination using Firestore (been implemented it, works like a charm).
Youtube implementation: Flutter and Firestore real-time Pagination.
High-level steps:
My implementation:
Using orderBy
Note that if you are using
orderBy
on querying your snapshot, any update to the order's field will cause a reordering of the whole list of items. Moreover, in some cases, it will fetch automatically more items (since we are using a limit for each snapshot, and the list of items is reordered, some snapshots may need to fetch more items to fill its limitation).