areMoreDocumentsAvailable<T> method

Future<bool> areMoreDocumentsAvailable<T>({
  1. required Query<Object?> query,
  2. required DocumentSnapshot<Object?> lastDocumentSnapshot,
  3. required T? onDocumentSnapshot(
    1. DocumentSnapshot<Object?> documentSnapshot
    ),
})

Retrieves true if there are more items and false if there are no more items for the specific query. This method is mostly used for pagination purpose.

query is a query. lastDocumentSnapshot is the last DocumentSnapshot contained within the list of items. If lastDocumentSnapshot is null, then it checks if at least 1 document exists in the collection. onDocumentSnapshot is a method with return type of an object.

Implementation

Future<bool> areMoreDocumentsAvailable<T>({
  required Query query,
  required DocumentSnapshot lastDocumentSnapshot,
  required T? Function(DocumentSnapshot documentSnapshot) onDocumentSnapshot,
}) async {
  _loggingService.log('FirestoreHelper.areMoreDocumentsAvailable: Last Document ID: ${lastDocumentSnapshot.id}');

  final elements = await getDocuments<T>(
    query: query.limit(1),
    logReference: 'FirestoreHelper.areMoreDocumentsAvailable',
    onDocumentSnapshot: (documentSnapshot) => onDocumentSnapshot(documentSnapshot),
    lastDocumentSnapshot: lastDocumentSnapshot,
  );

  if (elements == null || elements.isEmpty) {
    _loggingService.log('FirestoreHelper.areMoreDocumentsAvailable: No more elements');
    return false;
  } else {
    _loggingService.log('FirestoreHelper.areMoreDocumentsAvailable: More elements exists.');
    return true;
  }
}