import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hl_lieferservice/feature/car_selection/bloc/bloc.dart'; import 'package:hl_lieferservice/feature/car_selection/bloc/state.dart'; import 'package:hl_lieferservice/feature/cars/bloc/cars_bloc.dart'; import 'package:hl_lieferservice/feature/cars/bloc/cars_event.dart'; import 'package:hl_lieferservice/feature/cars/bloc/cars_state.dart'; import 'package:hl_lieferservice/feature/cars/presentation/car_fail_page.dart'; import 'package:hl_lieferservice/feature/cars/presentation/car_management.dart'; import 'package:hl_lieferservice/widget/app_message.dart'; class CarManagementPage extends StatefulWidget { const CarManagementPage({super.key}); @override State createState() => _CarManagementPageState(); } class _CarManagementPageState extends State { @override void initState() { super.initState(); // Account-Identifizierung läuft serverseitig über den JWT — keine // teamId mehr aus dem AuthState extrahieren. context.read().add(const CarLoad()); } void _add(String plate) { context.read().add(CarAdd(plate: plate)); } Future _refresh() async { context.read().add(const CarLoad(force: true)); } void _remove(String carId) { // Schutz: wenn dieses Fahrzeug aktuell für heute ausgewählt ist, // darf es nicht deaktiviert werden. final carSelectState = context.read().state; if (carSelectState is CarSelectComplete && carSelectState.selectedCar.id == carId) { context.showAppMessage( "Dieses Fahrzeug ist aktuell ausgewählt und kann nicht " "deaktiviert werden. Bitte wähle zuerst ein anderes Fahrzeug " "aus.", ); return; } // TODO Phase D: Schutz wieder einhängen, sobald TourBloc/Domain // mit UUID-Car-Ids arbeiten und prüfen, ob das Fahrzeug noch // beladene, nicht ausgelieferte Artikel hat. context.read().add(CarDeactivate(carId: carId)); } void _edit(String carId, String plate) { context.read().add(CarEdit(carId: carId, plate: plate)); } @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { if (state is CarsLoaded) { // Bringt seinen eigenen Scaffold samt Plus-Button mit. Ein äußerer // Scaffold würde die SnackBars anzeigen, ohne den Button zu kennen. return BlocBuilder( builder: (context, selectState) { final String? selectedCarId = selectState is CarSelectComplete ? selectState.selectedCar.id : null; return CarManagementOverview( cars: state.cars, selectedCarId: selectedCarId, onEdit: _edit, onAdd: _add, onDelete: _remove, onRefresh: _refresh, ); }, ); } if (state is CarsLoadingFailed) { return const Scaffold(body: CarsLoadingFailedPage()); } if (state is CarsLoading || state is CarsInitial) { return const Scaffold( body: Center(child: CircularProgressIndicator()), ); } return const Scaffold(body: SizedBox.shrink()); }, ); } }