streamQueryList method
Stream<List<T> >
streamQueryList({
- List<
OrderBy> ? orderBy, - List<
QueryArgsV2> ? args, - int? limit,
- dynamic startAfter,
- dynamic startAt,
- dynamic endBefore,
- dynamic endAt,
Returns the list of documents from collection, in the order provided in
orderBy
and matches the args
supplied as a stream so that changes can be
listened.
Use startAfter
, startAt
, endAt
, endBefore
to perform cursor based
queries and pagination of data
Implementation
Stream<List<T>> streamQueryList({
List<OrderBy>? orderBy,
List<QueryArgsV2>? args,
int? limit,
dynamic startAfter,
dynamic startAt,
dynamic endBefore,
dynamic endAt,
}) {
CollectionReference collref = _db.collection(collection);
Query? ref;
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 (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 (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]);
}
if (ref != null)
return ref!.snapshots().map((snap) => snap.docs
.map((doc) => fromDS(doc.id, doc.data() as Map<String, dynamic>))
.toList());
else
return collref.snapshots().map((snap) => snap.docs
.map((doc) => fromDS(doc.id, doc.data() as Map<String, dynamic>))
.toList());
}