apply method
Filters a list of locations according to this query.
Implementation
List<Location> apply(List<Location> locations) {
var filtered = locations.where((loc) {
// Time range filter
if (from != null && loc.timestamp.isBefore(from!)) return false;
if (to != null && loc.timestamp.isAfter(to!)) return false;
// Accuracy filter
final accuracy = loc.coords.accuracy;
if (minAccuracy != null && accuracy > minAccuracy!) {
return false;
}
if (maxAccuracy != null && accuracy < maxAccuracy!) {
return false;
}
// Motion filter
if (isMoving != null && loc.isMoving != isMoving) return false;
// Bounds filter
if (bounds != null && !bounds!.contains(loc.coords)) return false;
return true;
}).toList();
// Sort
filtered.sort((a, b) {
switch (sortOrder) {
case LocationSortOrder.newestFirst:
return b.timestamp.compareTo(a.timestamp);
case LocationSortOrder.oldestFirst:
return a.timestamp.compareTo(b.timestamp);
}
});
// Pagination
if (offset > 0 && offset < filtered.length) {
filtered = filtered.sublist(offset);
} else if (offset >= filtered.length) {
filtered = [];
}
// Limit
if (limit != null && limit! < filtered.length) {
filtered = filtered.sublist(0, limit);
}
return filtered;
}