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>
41 lines
1.3 KiB
Dart
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.
|
|
}
|
|
}
|
|
}
|