defaultSearchFilter<T> function
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;
}