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>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user