fetchModels<T> method

  1. @override
Future<PaginatedResult<T>> fetchModels<T>({
  1. required Query<Object?> query,
  2. required T fromMap(
    1. Map<String, dynamic>
    ),
  3. required String collectionName,
  4. int? limit,
  5. DocumentSnapshot<Object?>? lastDocumentSnapshot,
})
override

Implementation

@override
Future<PaginatedResult<T>> fetchModels<T>({
  required Query query,
  required T Function(Map<String, dynamic>) fromMap,
  required String collectionName,
  int? limit,
  DocumentSnapshot? lastDocumentSnapshot,
}) async {
  try {
    Query finalQuery = query;
    if (limit != null) {
      finalQuery = finalQuery.limit(limit);
    }
    if (lastDocumentSnapshot != null) {
      finalQuery = finalQuery.startAfterDocument(lastDocumentSnapshot);
    }

    final snapshot = await finalQuery.get();
    final items = snapshot.docs
        .map((doc) => fromMap(doc.data() as Map<String, dynamic>))
        .toList();

    return PaginatedResult(
      items: items,
      lastDocument: snapshot.docs.isNotEmpty ? snapshot.docs.last : null,
    );
  } catch (e) {
    throw FirebaseException(
      plugin: 'firestore',
      message: 'Error fetching $collectionName: $e',
    );
  }
}