filteredDevicesProviders top-level property

AutoDisposeProvider<AsyncValue<List<Device>>> filteredDevicesProviders
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(),
    );
  },
);