searchCountries static method

List<Country> searchCountries(
  1. String query,
  2. String getCountryName(
    1. String
    )
)

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;
}