search static method
List<SearchableItem>
search(
- List<
SearchableItem> items, - String query, {
- SearchConfig config = const SearchConfig(),
Search items with basic matching
Implementation
static List<SearchableItem> search(
List<SearchableItem> items,
String query, {
SearchConfig config = const SearchConfig(),
}) {
if (query.isEmpty) return items;
final searchQuery =
config.caseSensitive ? query : query.toLowerCase().trim();
final results = <SearchableItem>[];
final exactMatches = <SearchableItem>[];
final startsWithMatches = <SearchableItem>[];
final containsMatches = <SearchableItem>[];
for (final item in items) {
for (final field in config.searchFields) {
final fieldValue = _getFieldValue(item, field);
if (fieldValue == null) continue;
final searchValue =
config.caseSensitive ? fieldValue : fieldValue.toLowerCase();
// Exact match
if (searchValue == searchQuery) {
exactMatches.add(item);
break;
}
// Starts with query
else if (searchValue.startsWith(searchQuery)) {
startsWithMatches.add(item);
break;
}
// Contains query
else if (searchValue.contains(searchQuery)) {
containsMatches.add(item);
break;
}
}
}
// Combine results in priority order
results.addAll(exactMatches);
results.addAll(startsWithMatches);
results.addAll(containsMatches);
return results;
}