diff --git a/lib/feature/delivery/bloc/tour_bloc.dart b/lib/feature/delivery/bloc/tour_bloc.dart index bcf5086..e636eaf 100644 --- a/lib/feature/delivery/bloc/tour_bloc.dart +++ b/lib/feature/delivery/bloc/tour_bloc.dart @@ -80,7 +80,9 @@ class TourBloc extends Bloc { // ─── LoadTour ──────────────────────────────────────────────────────── Future _onLoad(LoadTour event, Emitter emit) async { - _selectedDate = event.date; + // Nur bei explizit gesetztem Datum die Wahl aktualisieren; ein reiner + // Reload (LoadTour()) behält den aktuell angezeigten Tag. + if (event.hasDate) _selectedDate = event.date; emit(const TourLoading()); try { final details = await tourRepository.getMyTourDetails(date: _selectedDate); @@ -103,9 +105,9 @@ class TourBloc extends Bloc { Future _onRefresh(RefreshTour event, Emitter emit) async { final current = state; if (current is! TourLoaded) { - // Keine sichtbare Tour zum „weichen" Refreshen — wie ein LoadTour - // behandeln. Das aktuell gewählte Datum beibehalten. - await _onLoad(LoadTour(date: _selectedDate), emit); + // Keine sichtbare Tour zum „weichen" Refreshen — wie ein Reload + // behandeln. `const LoadTour()` behält das aktuell gewählte Datum. + await _onLoad(const LoadTour(), emit); return; } diff --git a/lib/feature/delivery/bloc/tour_event.dart b/lib/feature/delivery/bloc/tour_event.dart index c12aae8..64d23b9 100644 --- a/lib/feature/delivery/bloc/tour_event.dart +++ b/lib/feature/delivery/bloc/tour_event.dart @@ -7,16 +7,28 @@ sealed class TourEvent { const TourEvent(); } -/// Initial-Load bzw. Laden der Tour des angemeldeten Fahrers für ein -/// bestimmtes Datum. Account-Filter sitzt im JWT. +/// Lädt die Tour des angemeldeten Fahrers. Account-Filter sitzt im JWT. /// -/// [date] `null` = „heute" (Server entscheidet). Wählt der Fahrer im -/// Kopf-Kalender ein Datum, wird es hier übergeben und der Bloc merkt es -/// sich für nachfolgende [RefreshTour]-Events. +/// Zwei Spielarten: +/// * [LoadTour] (ohne Datum): **Reload/Retry** — lädt den aktuell im Bloc +/// gemerkten Tag erneut und ändert die Datumswahl NICHT. Für Retry-Buttons +/// und Fehler-Seiten, die sonst versehentlich auf „heute" zurückspringen. +/// * [LoadTour.forDate]: setzt gezielt ein Datum (`null` = heute) und merkt +/// es sich als aktuelles Datum für nachfolgende Reloads/Refreshes. Für den +/// Kopf-Kalender und den Initial-Load (aus dem [TourDateCubit]). class LoadTour extends TourEvent { - const LoadTour({this.date}); + const LoadTour() + : date = null, + hasDate = false; + const LoadTour.forDate(this.date) : hasDate = true; + + /// Ziel-Datum, nur relevant wenn [hasDate] `true` ist. `null` = heute. final DateTime? date; + + /// `true` = [date] wurde bewusst gesetzt; `false` = „aktuelles Datum + /// behalten" (reiner Reload). + final bool hasDate; } /// Pull-to-refresh / manueller Reload aus der Übersicht. Vorhandener diff --git a/lib/widget/home/presentation/home.dart b/lib/widget/home/presentation/home.dart index 3f5eb4c..b552b67 100644 --- a/lib/widget/home/presentation/home.dart +++ b/lib/widget/home/presentation/home.dart @@ -9,6 +9,7 @@ import 'package:hl_lieferservice/feature/delivery/bloc/phase_bloc.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/phase_event.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/phase_state.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/tour_bloc.dart'; +import 'package:hl_lieferservice/feature/delivery/bloc/tour_date_cubit.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/tour_event.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/tour_state.dart'; import 'package:hl_lieferservice/feature/delivery/model/delivery_phase.dart'; @@ -52,7 +53,15 @@ class _HomeState extends State { // Tour beim ersten Aufbau laden. Account-Filter sitzt jetzt // serverseitig im JWT — kein Personalnummer-Argument mehr nötig. - context.read().add(const LoadTour()); + // + // Das im Kopf-Kalender gewählte Datum berücksichtigen: bleibt der + // TourDateCubit über einen (Warm-)Neustart bestehen (Header zeigt z. B. + // noch „Morgen"), muss der Initial-Load DENSELBEN Tag laden — sonst + // klaffen Anzeige (Morgen) und geladene Daten (Heute) auseinander. + // `null` = heute (Server entscheidet), also unverändertes Default. + context + .read() + .add(LoadTour.forDate(context.read().state)); // CarsBloc auch hier triggern: wenn der CarSelectBloc beim App-Start // eine valide Tages-Auswahl aus den SharedPreferences fand, wurde die diff --git a/lib/widget/phase_stepper/phase_stepper.dart b/lib/widget/phase_stepper/phase_stepper.dart index 4c8d1ae..6970d0b 100644 --- a/lib/widget/phase_stepper/phase_stepper.dart +++ b/lib/widget/phase_stepper/phase_stepper.dart @@ -441,7 +441,7 @@ class _SelectedDatePill extends StatelessWidget { ); if (picked == null || !context.mounted) return; context.read().pick(picked); - context.read().add(LoadTour(date: picked)); + context.read().add(LoadTour.forDate(picked)); } }