listenToElementsStream method
StreamSubscription<QuerySnapshot<Object?> >
listenToElementsStream({
- 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> listenToElementsStream({
required String logReference,
required Query query,
required ValueSetter<DocumentChange> onDocumentChange,
DocumentSnapshot? lastDocumentSnapshot,
}) {
final bool isMoreQuery = lastDocumentSnapshot != null;
final Query currentQuery = isMoreQuery ? query.startAfterDocument(lastDocumentSnapshot) : query;
_loggingService.log(
'FirestoreGenericService.listenToElementsStream.$logReference: Query: ${query.parameters}, IsMoreQuery: $isMoreQuery');
final StreamSubscription<QuerySnapshot> streamSubscription = currentQuery.snapshots().listen((event) {
event.docChanges.forEach((docChange) {
_loggingService.log('FirestoreGenericService.listenToElementsStream.$logReference:'
' Type: ${docChange.type}. DocId: ${docChange.doc.id}');
onDocumentChange(docChange);
});
});
return streamSubscription;
}