loadCountries method
Load countries from cache
Implementation
Future<Map<String, Country>?> loadCountries() async {
try {
final prefs = await SharedPreferences.getInstance();
// Check if cache exists
if (!prefs.containsKey(_cacheKey)) {
return null;
}
// Check cache expiry
final timestamp = prefs.getInt(_timestampKey);
if (timestamp != null) {
final cacheDate = DateTime.fromMillisecondsSinceEpoch(timestamp);
final age = DateTime.now().difference(cacheDate);
if (age > _cacheExpiry) {
print('Cache expired (${age.inDays} days old)');
await clearCache();
return null;
}
}
// Load and parse
final jsonString = prefs.getString(_cacheKey);
if (jsonString == null) return null;
final List<dynamic> jsonList = json.decode(jsonString);
final Map<String, Country> countries = {};
for (var item in jsonList) {
final country = Country.fromJson(item as Map<String, dynamic>);
countries[country.code] = country;
}
return countries.isNotEmpty ? countries : null;
} catch (e) {
print('Failed to load countries from cache: $e');
return null;
}
}