Files
Holzleitner-Lieferservice-App/lib/main.dart
Dennis Nemec f832b69b9d feat(umgebung): Server-Umgebung im Login-Screen waehlbar (Produktion/Test)
- Umgebungen (Name, API-URL, Keycloak-Issuer) kommen aus
  assets/hl_server_config.json statt hartcodiertem BackendConfig.prod;
  Testumgebung 192.168.1.9:3001 ist dort hinterlegt
- AppBloc laedt die Config, aktiviert die gespeicherte Wahl (Fallback
  Default) und registriert das Networking; Wechsel persistiert per
  SharedPreferences und registriert neu
- Bloc-Baum ist pro Umgebung gekeyt: beim Wechsel entstehen alle Blocs
  mit dem neuen API-Client neu
- Login-Screen: Zahnrad oben rechts oeffnet Einstellungen mit Umgebungs-
  Cards (Name + IP:Port); Hinweis auf aktive Umgebung unter dem Button
- Fahrzeugauswahl pro Umgebung getrennt (eigene DB = eigene Car-IDs)
- Tests fuer Config-Parsing, Auswahl-Fallback, Card-Wechsel, Re-Registrierung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 13:06:49 +02:00

56 lines
2.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import 'package:hl_lieferservice/bloc/app_bloc.dart';
import 'package:hl_lieferservice/bloc/app_events.dart';
import 'package:hl_lieferservice/data/cache/attachment_cache.dart';
import 'package:hl_lieferservice/data/network/environment_repository.dart';
import 'package:hl_lieferservice/data/network/network_locator.dart';
import 'package:hl_lieferservice/feature/settings/bloc/settings_bloc.dart';
import 'package:hl_lieferservice/feature/settings/bloc/settings_event.dart';
import 'package:hl_lieferservice/widget/app.dart';
final locator = GetIt.instance;
void main() {
// Das Networking (HTTP-Stack + Token-Provider) registriert der AppBloc,
// sobald die Umgebung aus `assets/hl_server_config.json` feststeht. Alle
// Konsumenten von `locator<HolzleitnerApi>()` entstehen erst danach
// (Bloc-Baum wird erst bei `AppConfigLoaded` gebaut).
// Persistenter Vorschau-Cache für Attachment-Bilder. Über die gesamte
// App-Lebensdauer stabil und zustandslos (das Verzeichnis löst er lazy
// selbst auf), daher hier als Singleton.
locator.registerSingleton<AttachmentCache>(AttachmentCache());
runApp(MultiBlocProvider(providers: [
BlocProvider(
create: (context) => AppBloc(
repository: EnvironmentRepository(),
activate: (config) =>
registerNetworking(locator: locator, config: config),
),
),
BlocProvider(create: (context) => SettingsBloc())
], child: App()));
}
class App extends StatefulWidget {
const App({super.key});
@override
State<StatefulWidget> createState() => _AppState();
}
class _AppState extends State<App> {
@override
void initState() {
super.initState();
context.read<AppBloc>().add(AppLoadConfig(path: "hl_server_config.json"));
context.read<SettingsBloc>().add(LoadSettings());
}
@override
Widget build(BuildContext context) {
return DeliveryApp();
}
}