import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../l10n/app_localizations.dart'; import '../../models/country.dart'; import '../../providers/emergency_provider.dart'; /// Durchsuchbare Länderliste zur manuellen Länderauswahl /// (`docs/plan.md`, Abschnitt 7 + 8, AP6). /// /// Tap auf ein Land ruft [EmergencyProvider.selectCountryManually] auf – /// das persistiert die Auswahl und stößt die Ermittlungskette danach sofort /// erneut an – und schließt den Screen. class CountryPickerScreen extends StatefulWidget { const CountryPickerScreen({super.key}); @override State createState() => _CountryPickerScreenState(); } class _CountryPickerScreenState extends State { final _searchController = TextEditingController(); String _query = ''; @override void dispose() { _searchController.dispose(); super.dispose(); } List _filtered(List countries) { final query = _query.trim().toLowerCase(); if (query.isEmpty) return countries; return countries .where( (country) => country.nameDe.toLowerCase().contains(query) || country.nameEn.toLowerCase().contains(query) || country.isoCode.toLowerCase().contains(query), ) .toList(growable: false); } Future _select(BuildContext context, Country country) async { await context.read().selectCountryManually(country.isoCode); if (context.mounted) Navigator.of(context).pop(); } @override Widget build(BuildContext context) { final repository = context.read().repository; final countries = _filtered(repository.allCountries); final l10n = AppLocalizations.of(context)!; return Scaffold( appBar: AppBar(title: Text(l10n.pickerTitle)), body: Column( children: [ Padding( padding: const EdgeInsets.all(16), child: TextField( controller: _searchController, autofocus: true, decoration: InputDecoration( prefixIcon: const Icon(Icons.search), hintText: l10n.pickerSearchHint, border: const OutlineInputBorder(), ), onChanged: (value) => setState(() => _query = value), ), ), Expanded( child: countries.isEmpty ? Center(child: Text(l10n.pickerNoResults)) : ListView.builder( itemCount: countries.length, itemBuilder: (context, index) { final country = countries[index]; return ListTile( key: ValueKey(country.isoCode), leading: Text(country.flag, style: const TextStyle(fontSize: 24)), title: Text(country.nameDe), subtitle: Text(country.isoCode), onTap: () => _select(context, country), ); }, ), ), ], ), ); } }