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,46 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import 'country_code_source.dart';
|
||||
|
||||
/// Liest/schreibt den vom Nutzer manuell gewählten ISO-Ländercode aus
|
||||
/// `shared_preferences` (`docs/plan.md`, Abschnitt 8, AP6).
|
||||
///
|
||||
/// Bewusst getrennt von [CachedCountryCodeSource] (eigener Key, eigene
|
||||
/// Klasse): Die manuelle Auswahl ist ein Nutzer-Override und darf vom
|
||||
/// automatisch zuletzt ermittelten Code (SIM/GPS-Treffer) nicht überschrieben
|
||||
/// oder mit ihm verwechselt werden. `LocationService` fragt diese Quelle
|
||||
/// deshalb mit höchster Priorität vor SIM/GPS/Cache ab.
|
||||
class ManualCountryCodeSource implements ManualCountryCodeStore {
|
||||
const ManualCountryCodeSource();
|
||||
|
||||
static const _key = 'manual_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;
|
||||
}
|
||||
}
|
||||
|
||||
/// Setzt die manuelle Länderauswahl. `isoCode == null` löscht eine zuvor
|
||||
/// gesetzte Auswahl wieder, damit der Nutzer zur automatischen Ermittlung
|
||||
/// zurückkehren kann. Best effort: Schreibfehler werden verschluckt.
|
||||
@override
|
||||
Future<void> save(String? isoCode) async {
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
if (isoCode == null) {
|
||||
await prefs.remove(_key);
|
||||
} else {
|
||||
await prefs.setString(_key, isoCode.toUpperCase());
|
||||
}
|
||||
} catch (_) {
|
||||
// Best effort, siehe Doc-Kommentar oben.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user