Files
emergency/lib/models/country.dart
T
rootandClaude Sonnet 5 e3aa088bc2 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>
2026-07-24 11:29:38 +02:00

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