getCountries method

Future<Map<String, String>> getCountries()

ISO 3166-1 alpha-2 code to human-readable country name.

Implementation

Future<Map<String, String>> getCountries() async {
  if (_countries != null) return _countries!;

  final file = File('$_zoneinfoDir/iso3166.tab');
  if (!await file.exists()) {
    throw FileSystemException('tzdata not installed', file.path);
  }

  final result = <String, String>{};
  for (final line in await file.readAsLines()) {
    if (line.isEmpty || line.startsWith('#')) continue;
    final parts = line.split('\t');
    if (parts.length < 2) continue;
    final code = parts[0].trim().toUpperCase();
    final name = parts[1].trim();
    if (code.isEmpty || name.isEmpty) continue;
    result[code] = name;
  }

  return _countries = Map.unmodifiable(result);
}