currencies static method

List<Currency> currencies({
  1. String? name,
  2. String? code,
  3. String? symbol,
})

Retrieves all unique currencies from the countries dataset.

This method extracts and deduplicates all currency information from all countries, useful for financial applications or currency-based filtering.

Returns a List<Currency> of all unique currencies found across all countries.

Example:

List<Currency> allCurrencies = WorldPickerService.currencies();
// Returns: USD, EUR, GBP, JPY, etc.

Implementation

static List<Currency> currencies({
  String? name,
  String? code,
  String? symbol,
}) {
  final countries = loadCountries();
  final currencyMap = <String, Currency>{};
  final currencyCountries = <String, List<Country>>{};

  for (final country in countries) {
    for (final currency in country.currencies) {
      currencyCountries.putIfAbsent(currency.code, () => []).add(country);
      currencyMap[currency.code] = currency;
    }
  }

  final List<Currency> allCurrencies = [];
  for (final entry in currencyMap.entries) {
    final code = entry.key;
    final baseCurrency = entry.value;
    final countriesForCurrency = currencyCountries[code] ?? [];
    allCurrencies.add(baseCurrency.copyWith(
      countries: countriesForCurrency,
    ));
  }

  final filtred = allCurrencies.where((currency) {
    final matchesName = name == null ||
        currency.name.toLowerCase().contains(name.toLowerCase());
    final matchesCode = code == null ||
        currency.code.toLowerCase().contains(code.toLowerCase());
    final matchesSymbol = symbol == null ||
        currency.symbol.toLowerCase().contains(symbol.toLowerCase());

    return matchesName || matchesCode || matchesSymbol;
  }).toList();

  return filtred..sort((a, b) => a.name.compareTo(b.name));
}