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>
57 lines
1.6 KiB
Dart
57 lines
1.6 KiB
Dart
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;
|
|
}
|
|
}
|