import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'core/country_locale_map.dart'; import 'features/home/home_screen.dart'; import 'l10n/app_localizations.dart'; import 'providers/emergency_provider.dart'; import 'repositories/emergency_number_repository.dart'; import 'services/location_service.dart'; /// Wurzel-Widget der App. /// /// [repository] und [locationService] sind injizierbar, damit Tests eigene /// (ggf. gefakte) Instanzen für den intern erzeugten [EmergencyProvider] /// verwenden können, statt echte Asset-I/O bzw. SIM/GPS/Cache-Zugriffe /// anzustoßen. Wird stattdessen direkt ein fertiger [provider] übergeben, /// werden [repository]/[locationService] ignoriert – das erlaubt Tests, den /// `EmergencyProvider` selbst zu faken bzw. vorab zu befüllen. class App extends StatelessWidget { const App({super.key, this.repository, this.locationService, this.provider}); final EmergencyNumberRepository? repository; final LocationService? locationService; final EmergencyProvider? provider; @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (_) => provider ?? EmergencyProvider( repository: repository ?? EmergencyNumberRepository(), locationService: locationService ?? LocationService(), ), // AP7 (Lokalisierung): `locale` wird reaktiv aus dem erkannten Land // berechnet (docs/plan.md, Abschnitt 2 + 8), daher ein Consumer statt // eines einmalig gebauten MaterialApp – ändert sich `country` (z. B. // nach manueller Länderauswahl aus AP6), rebuildet auch die App-Sprache. child: Consumer( builder: (context, emergencyProvider, _) { return MaterialApp( title: 'Emergency', theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.red)), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, locale: resolveAppLocale( emergencyProvider.country?.isoCode, AppLocalizations.supportedLocales, ), home: const HomeScreen(), ); }, ), ); } }