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,56 @@
|
||||
import 'emergency_number.dart';
|
||||
|
||||
/// Ein Land mit seinen landesspezifischen Notrufnummern.
|
||||
class Country {
|
||||
const Country({
|
||||
required this.isoCode,
|
||||
required this.nameDe,
|
||||
required this.nameEn,
|
||||
required this.flag,
|
||||
required this.numbers,
|
||||
});
|
||||
|
||||
/// ISO 3166-1 alpha-2 Code, z. B. "DE".
|
||||
final String isoCode;
|
||||
final String nameDe;
|
||||
final String nameEn;
|
||||
final String flag;
|
||||
final List<EmergencyNumber> numbers;
|
||||
|
||||
factory Country.fromJson(String isoCode, Map<String, dynamic> json) {
|
||||
final numbersJson = json['numbers'] as List<dynamic>;
|
||||
return Country(
|
||||
isoCode: isoCode,
|
||||
nameDe: json['name_de'] as String,
|
||||
nameEn: json['name_en'] as String,
|
||||
flag: json['flag'] as String,
|
||||
numbers: numbersJson
|
||||
.map((e) => EmergencyNumber.fromJson(e as Map<String, dynamic>))
|
||||
.toList(growable: false),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() => 'Country(isoCode: $isoCode, nameEn: $nameEn)';
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
(other is Country &&
|
||||
other.isoCode == isoCode &&
|
||||
other.nameDe == nameDe &&
|
||||
other.nameEn == nameEn &&
|
||||
other.flag == flag &&
|
||||
_listEquals(other.numbers, numbers));
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(isoCode, nameDe, nameEn, flag, Object.hashAll(numbers));
|
||||
|
||||
static bool _listEquals(List<EmergencyNumber> a, List<EmergencyNumber> b) {
|
||||
if (a.length != b.length) return false;
|
||||
for (var i = 0; i < a.length; i++) {
|
||||
if (a[i] != b[i]) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user