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);
}