searchCountries static method
Search countries by name, code, or phone code
query is the search term
getCountryName should be a function that returns the localized name for a country code
Implementation
static List<Country> searchCountries(
String query,
String Function(String) getCountryName,
) {
if (query.isEmpty) return countries;
final lowercaseQuery = query.toLowerCase().trim();
final results = <Country>[];
final exactMatches = <Country>[];
final startsWithMatches = <Country>[];
final containsMatches = <Country>[];
for (final country in countries) {
final countryName = getCountryName(country.code).toLowerCase();
final countryCode = country.code.toLowerCase();
final countryPhoneCode = country.phoneCode.toLowerCase();
// Exact match
if (countryName == lowercaseQuery ||
countryCode == lowercaseQuery ||
countryPhoneCode == lowercaseQuery) {
exactMatches.add(country);
}
// Starts with query
else if (countryName.startsWith(lowercaseQuery) ||
countryCode.startsWith(lowercaseQuery) ||
countryPhoneCode.startsWith(lowercaseQuery)) {
startsWithMatches.add(country);
}
// Contains query
else if (countryName.contains(lowercaseQuery) ||
countryCode.contains(lowercaseQuery) ||
countryPhoneCode.contains(lowercaseQuery)) {
containsMatches.add(country);
}
}
// Combine results in priority order
results.addAll(exactMatches);
results.addAll(startsWithMatches);
results.addAll(containsMatches);
return results;
}