listenToDocumentsStream method

StreamSubscription<QuerySnapshot<Object?>> listenToDocumentsStream({
  1. required String logReference,
  2. required Query<Object?> query,
  3. required ValueSetter<DocumentChange<Object?>> onDocumentChange,
  4. 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;
}