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 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 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. } } }