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/delivery/overview/presentation/delivery_fail_page.dart'; import 'package:hl_lieferservice/feature/delivery/overview/presentation/delivery_overview.dart'; import 'package:hl_lieferservice/model/tour.dart'; import '../../bloc/tour_bloc.dart'; import '../../bloc/tour_state.dart'; class DeliveryOverviewPage extends StatefulWidget { const DeliveryOverviewPage({super.key}); @override State createState() => _DeliveryOverviewPageState(); } class _DeliveryOverviewPageState extends State { Widget _buildOverviewWithBanner({ required Tour tour, required String bannerText, }) { return Column( children: [ Material( color: Colors.amber.shade100, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: Row( children: [ const SizedBox( width: 16, height: 16, child: CircularProgressIndicator(strokeWidth: 2), ), const SizedBox(width: 12), Expanded(child: Text(bannerText)), ], ), ), ), Expanded( child: DeliveryOverview(tour: tour), ), ], ); } @override Widget build(BuildContext context) { final carState = context.watch().state; return Scaffold( appBar: AppBar( title: const Text("Auslieferung"), centerTitle: false, backgroundColor: Theme.of(context).primaryColor, foregroundColor: Theme.of(context).colorScheme.onSecondary, actions: [ if (carState is CarSelectComplete) Padding( padding: const EdgeInsets.only(right: 16), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( Icons.local_shipping, color: Theme.of(context).colorScheme.onSecondary, size: 20, ), const SizedBox(width: 6), Text( carState.selectedCar.plate, style: TextStyle( color: Theme.of(context).colorScheme.onSecondary, fontWeight: FontWeight.bold, ), ), ], ), ), ], ), body: BlocBuilder( builder: (context, state) { if (state is TourLoaded) { if (state.distances == null) { return _buildOverviewWithBanner( tour: state.tour, bannerText: "Berechne Distanzen…", ); } return DeliveryOverview(tour: state.tour); } if (state is TourLoadingFailed) { return DeliveryLoadingFailedPage(); } return const Center(child: CircularProgressIndicator()); }, ), ); } }