fetchCountries method

  1. @override
Future<Map<String, Country>?> fetchCountries()
override

Fetch country data from the source Returns null if fetch fails (silent fallback)

Implementation

@override
Future<Map<String, Country>?> fetchCountries() async {
  try {
    final response = await http
        .get(Uri.parse(apiUrl), headers: headers)
        .timeout(timeout);

    if (response.statusCode == 200) {
      final List<dynamic> jsonList = json.decode(response.body);
      final Map<String, Country> countries = {};

      for (var item in jsonList) {
        try {
          final country = Country.fromJson(item as Map<String, dynamic>);
          countries[country.code] = country;
        } catch (e) {
          // Skip malformed entries
          print('Warning: Skipping malformed country entry: $e');
        }
      }

      return countries.isNotEmpty ? countries : null;
    }

    print('API returned status code: ${response.statusCode}');
    return null;
  } catch (e) {
    // Silent fallback - API failure should not break the app
    print('Country API fetch failed: $e');
    return null;
  }
}