listenToDocumentsStream method
StreamSubscription<QuerySnapshot<Object?> >
listenToDocumentsStream({
- required String logReference,
- required Query<
Object?> query, - required ValueSetter<
DocumentChange< onDocumentChange,Object?> > - DocumentSnapshot<
Object?> ? lastDocumentSnapshot,
Listening for the stream of QuerySnapshot
from Firestore.
logReference
is some string for logging purpose.
query
is query used for this particular call.
onDocumentChange
is a ValueSetter which will return DocumentChange
object from firestore.
lastDocumentSnapshot
is the snapshot of the last document. If lastDocumentSnapshot
is null, it means
there will be no pagination.
Implementation
StreamSubscription<QuerySnapshot> listenToDocumentsStream({
required String logReference,
required Query query,
required ValueSetter<DocumentChange> onDocumentChange,
DocumentSnapshot? lastDocumentSnapshot,
}) {
final isMoreQuery = lastDocumentSnapshot != null;
final currentQuery = isMoreQuery ? query.startAfterDocument(lastDocumentSnapshot) : query;
_loggingService.log('FirestoreHelper.listenToDocumentsStream.$logReference: '
'Query: ${query.parameters}, IsMoreQuery: $isMoreQuery');
final streamSubscription = currentQuery.snapshots().listen((event) {
event.docChanges.forEach((docChange) {
_loggingService.log('FirestoreHelper.listenToDocumentsStream.$logReference:'
' Type: ${docChange.type}. DocId: ${docChange.doc.id}');
onDocumentChange(docChange);
});
});
return streamSubscription;
}