getQueryList method

Future<List<T>> getQueryList({
  1. List<OrderBy>? orderBy,
  2. List<QueryArgsV2>? args,
  3. int? limit,
  4. dynamic startAfter,
  5. dynamic startAt,
  6. dynamic endAt,
  7. dynamic endBefore,
})

Returns the list of documents from collection, in the order provided in orderBy and matches the args supplied. use startAfter, startAt, endAt, endBefore to perform cursor based queries and pagination of data

Implementation

Future<List<T>> getQueryList({
  List<OrderBy>? orderBy,
  List<QueryArgsV2>? args,
  int? limit,
  dynamic startAfter,
  dynamic startAt,
  dynamic endAt,
  dynamic endBefore,
}) async {
  CollectionReference collref = _db.collection(collection);
  Query? ref;
  if (args != null) {
    for (final arg in args) {
      if (ref == null)
        ref = collref.where(
          arg.key,
          isEqualTo: arg.isEqualTo,
          isNotEqualTo: arg.isNotEqualTo,
          isGreaterThan: arg.isGreaterThan,
          isGreaterThanOrEqualTo: arg.isGreaterThanOrEqualTo,
          isLessThan: arg.isLessThan,
          isLessThanOrEqualTo: arg.isLessThanOrEqualTo,
          isNull: arg.isNull,
          arrayContains: arg.arrayContains,
          arrayContainsAny: arg.arrayContainsAny,
          whereIn: arg.whereIn,
          whereNotIn: arg.whereNotIn,
        );
      else
        ref = ref.where(
          arg.key,
          isEqualTo: arg.isEqualTo,
          isNotEqualTo: arg.isNotEqualTo,
          isGreaterThan: arg.isGreaterThan,
          isGreaterThanOrEqualTo: arg.isGreaterThanOrEqualTo,
          isLessThan: arg.isLessThan,
          isLessThanOrEqualTo: arg.isLessThanOrEqualTo,
          isNull: arg.isNull,
          arrayContains: arg.arrayContains,
          arrayContainsAny: arg.arrayContainsAny,
          whereIn: arg.whereIn,
          whereNotIn: arg.whereNotIn,
        );
    }
  }
  if (orderBy != null) {
    orderBy.forEach((order) {
      if (ref == null)
        ref = collref.orderBy(order.field, descending: order.descending);
      else
        ref = ref!.orderBy(order.field, descending: order.descending);
    });
  }
  if (limit != null) {
    if (ref == null)
      ref = collref.limit(limit);
    else
      ref = ref!.limit(limit);
  }
  if (startAfter != null && orderBy != null) {
    ref = ref!.startAfter([startAfter]);
  }
  if (startAt != null && orderBy != null) {
    ref = ref!.startAt([startAt]);
  }
  if (endAt != null && orderBy != null) {
    ref = ref!.endAt([endAt]);
  }
  if (endBefore != null && orderBy != null) {
    ref = ref!.endBefore([endBefore]);
  }
  QuerySnapshot query;
  if (ref != null)
    query = await ref!.get();
  else
    query = await collref.get();

  return query.docs
      .map((doc) => fromDS(doc.id, doc.data() as Map<String, dynamic>))
      .toList();
}