defaultSearchFilter<T> function

List<FilteredSearchItem<T>> defaultSearchFilter<T>(
  1. String query,
  2. List<T> items,
  3. String toString(
    1. T
    )
)

Default fuzzy filter implementation.

Implementation

List<FilteredSearchItem<T>> defaultSearchFilter<T>(
  String query,
  List<T> items,
  String Function(T) toString,
) {
  if (query.isEmpty) {
    return items
        .asMap()
        .entries
        .map((e) => FilteredSearchItem(item: e.value, index: e.key))
        .toList();
  }

  final results = <FilteredSearchItem<T>>[];
  final queryLower = query.toLowerCase();

  for (var i = 0; i < items.length; i++) {
    final item = items[i];
    final text = toString(item).toLowerCase();

    // Simple substring match with character positions
    final matches = <int>[];
    var queryIndex = 0;

    for (var j = 0; j < text.length && queryIndex < queryLower.length; j++) {
      if (text[j] == queryLower[queryIndex]) {
        matches.add(j);
        queryIndex++;
      }
    }

    if (queryIndex == queryLower.length) {
      results.add(FilteredSearchItem(item: item, index: i, matches: matches));
    }
  }

  return results;
}