Files
emergency/lib/services/country_code_sources/cached_country_code_source.dart
rootandClaude Sonnet 5 e3aa088bc2 Notrufnummern-Datenbasis, Ländererkennung, State-Management und Lokalisierung (AP1-AP7)
Implementiert den kompletten Kern-Flow der Emergency App gemäß docs/plan.md:
- Notrufnummern-Datenbasis für 199 Länder + Modelle/Repository (AP1)
- DialerService für tel:-Notrufe ohne Auto-Dial (AP2)
- Statisches UI mit Panik-Button-Fallback (AP3)
- Priorisierte Ländererkennung: SIM/Netz -> GPS/Geocoding -> Cache (AP4)
- EmergencyProvider verdrahtet Repository/LocationService mit der UI (AP5)
- Manuelle Länderauswahl als Fallback samt eigener Priorität (AP6)
- UI-Lokalisierung (de/en/fr/es), an erkanntes Land gekoppelt (AP7)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 11:29:38 +02:00

41 lines
1.3 KiB
Dart

import 'package:shared_preferences/shared_preferences.dart';
import 'country_code_source.dart';
/// Liest/schreibt den zuletzt erfolgreich ermittelten ISO-Ländercode aus
/// `shared_preferences` (`docs/plan.md`, Abschnitt 6, letzter Fallback vor
/// `countryUnknown`).
class CachedCountryCodeSource implements CountryCodeCache {
const CachedCountryCodeSource();
static const _key = 'last_known_country_code';
@override
Future<String?> resolve() async {
try {
final prefs = await SharedPreferences.getInstance();
final code = prefs.getString(_key)?.trim();
if (code == null || code.isEmpty) return null;
return code.toUpperCase();
} catch (_) {
return null;
}
}
/// Speichert [isoCode] als zuletzt bekannten Ländercode.
///
/// Wird von [LocationService] nach jeder erfolgreichen Ermittlung über
/// SIM oder GPS aufgerufen. Best effort: Schreibfehler werden verschluckt,
/// damit ein kaputter Cache die eigentliche Ländererkennung nicht
/// beeinflusst.
@override
Future<void> save(String isoCode) async {
try {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_key, isoCode.toUpperCase());
} catch (_) {
// Best effort, siehe Doc-Kommentar oben.
}
}
}