filteredDevicesProviders top-level property
final
Implementation
final filteredDevicesProviders = Provider.autoDispose<AsyncValue<List<Device>>>(
(ref) {
final searchText = ref.watch(searchTextProvider);
final filters = ref.watch(fleetFiltersProvider); // <-- watch filters
final fleetDevices = ref.watch(fleetDevicesProvider);
bool propertyContainsSearchText(String? property) {
if (property == null) return false;
return property.toLowerCase().contains(searchText.toLowerCase());
}
bool containsSearchText(Device device) {
return searchText.isEmpty ||
propertyContainsSearchText(device.serialNumber) ||
propertyContainsSearchText(device.displayName) ||
propertyContainsSearchText(device.modelNumber) ||
propertyContainsSearchText(device.address.displayAddress);
}
// NEW: AND all selected filter categories; within each category it's OR.
bool matchesAllFilters(Device d) => _matchesFilters(d, filters);
return fleetDevices.mapValue(
(value) => value
.where((d) => containsSearchText(d) && matchesAllFilters(d))
.toList(),
);
},
);