query method

You can change the query object of Firestore.

Implementation

@override
@protected
@mustCallSuper
Query<DynamicMap> query(Query<DynamicMap> query) {
  if (parameters.isNotEmpty) {
    if (parameters.containsKey("key") && parameters["key"].isNotEmpty) {
      if (parameters.containsKey("equalTo") &&
          parameters["equalTo"].isNotEmpty) {
        query = query.where(
          parameters["key"]!,
          isEqualTo: FirestoreUtility._parse(parameters["equalTo"]),
        );
      }
      if (parameters.containsKey("notEqualTo") &&
          parameters["noteEqualTo"].isNotEmpty) {
        query = query.where(
          parameters["key"]!,
          isNotEqualTo: FirestoreUtility._parse(parameters["noteEqualTo"]),
        );
      }
      if (parameters.containsKey("startAt") &&
          parameters["startAt"].isNotEmpty) {
        query = query.where(
          parameters["key"]!,
          isGreaterThanOrEqualTo: num.parse(parameters["startAt"]!),
        );
      }
      if (parameters.containsKey("endAt") && parameters["endAt"].isNotEmpty) {
        query = query.where(
          parameters["key"]!,
          isLessThanOrEqualTo: num.parse(parameters["endAt"]!),
        );
      }
      if (parameters.containsKey("contains") &&
          parameters["contains"].isNotEmpty) {
        query = query.where(
          parameters["key"]!,
          arrayContains: FirestoreUtility._parse(parameters["contains"]),
        );
      }
    }
    if (parameters.containsKey("limitToFirst") &&
        parameters["limitToFirst"].isNotEmpty) {
      query =
          query.limit(int.parse(parameters["limitToFirst"]!) * _nextCount);
    }
    if (parameters.containsKey("limitToLast") &&
        parameters["limitToLast"].isNotEmpty) {
      query = query
          .limitToLast(int.parse(parameters["limitToLast"]!) * _nextCount);
    }
    if (parameters.containsKey("orderByDesc") &&
        parameters["orderByDesc"].isNotEmpty) {
      if (!(parameters.containsKey("key") &&
          parameters["key"] == parameters["orderByDesc"] &&
          (parameters.containsKey("equalTo") ||
              parameters.containsKey("notEqualTo") ||
              parameters.containsKey("containsAny") ||
              parameters.containsKey("whereIn") ||
              parameters.containsKey("whereNotIn")))) {
        query = query.orderBy(parameters["orderByDesc"]!, descending: true);
      }
    } else if (parameters.containsKey("orderByAsc") &&
        parameters["orderByAsc"].isNotEmpty) {
      if (!(parameters.containsKey("key") &&
          parameters["key"] == parameters["orderByAsc"] &&
          (parameters.containsKey("equalTo") ||
              parameters.containsKey("notEqualTo") ||
              parameters.containsKey("containsAny") ||
              parameters.containsKey("whereIn") ||
              parameters.containsKey("whereNotIn")))) {
        query = query.orderBy(parameters["orderByAsc"]!);
      }
    } else {
      if (parameters.containsKey("startAt") &&
          parameters["startAt"].isNotEmpty) {
        query = query.orderBy(parameters["key"]!);
      } else if (parameters.containsKey("endAt") &&
          parameters["endAt"].isNotEmpty) {
        query = query.orderBy(parameters["key"]!);
      }
    }
  }
  return super.query(query);
}