From 3add6b498e1791da8c5a4bafbb15247a999cfd79 Mon Sep 17 00:00:00 2001 From: Dennis Nemec Date: Wed, 9 Sep 2026 01:25:20 +0200 Subject: [PATCH] fix(phasen): Reset zeigt sofort nur 'Sortieren' - keine ererbten Haekchen Nach einem Tour-Wechsel (Tageswechsel im Kopf-Kalender, Resync) blieben bis zum asynchronen Nachladen aus den SharedPreferences noch Phase und Haekchen (maxReached) der vorherigen Tour sichtbar; zudem konnte ein persistiertes Max uebernommen werden, obwohl fuer die neue Tour-Version gar keine Phase persistiert war. - Bei Tour-Wechsel eines bereits geladenen Autos den In-Memory-Stand SOFORT synchron auf die Eintrittsphase setzen (nur Sortieren aktiv, keine Haekchen); ein persistierter Stand der neuen Tour folgt per PhaseLoaded - persistedMax nur uebernehmen, wenn fuer diese Tour-Version auch eine Phase persistiert ist (frische Tour-Version startet immer ohne ererbte Haekchen) Co-Authored-By: Claude Opus 4.8 (1M context) --- lib/feature/delivery/bloc/phase_bloc.dart | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/feature/delivery/bloc/phase_bloc.dart b/lib/feature/delivery/bloc/phase_bloc.dart index 7f83d26..7add197 100644 --- a/lib/feature/delivery/bloc/phase_bloc.dart +++ b/lib/feature/delivery/bloc/phase_bloc.dart @@ -95,14 +95,29 @@ class PhaseBloc extends Bloc { return; } + // Tour-Wechsel bei bereits geladenem Auto: den alten In-Memory-Stand + // SOFORT synchron auf die Eintrittsphase zurücksetzen (nur „Sortieren" + // aktiv, keine Häkchen), damit während des asynchronen Nachladens aus + // den SharedPreferences nichts von der vorherigen Tour sichtbar bleibt. + // Ein evtl. persistierter Stand der neuen Tour (Rückkehr zu einem alten + // Tag) folgt direkt danach per PhaseLoaded. + if (current.phaseByCar.containsKey(event.carId)) { + final entry = _entryPhase(); + emit(current.withLoaded(event.carId, entry, entry)); + } + try { final persisted = await phaseService.load(event.carId, token); final persistedMax = await phaseService.loadMax(event.carId, token); final phase = persisted ?? _entryPhase(); - // Max ist mindestens die aktuelle Phase. Falls in der Persistenz ein - // höherer Wert steht (Rücksprung), den nehmen. + // Max ist mindestens die aktuelle Phase. Ein höheres persistiertes Max + // (Rücksprung am selben Tag) wird NUR übernommen, wenn für diese + // Tour-Version auch eine Phase persistiert ist. Eine frische + // Tour-Version (persisted == null) startet immer ohne ererbte Häkchen. DeliveryPhase maxPhase = phase; - if (persistedMax != null && persistedMax.index > maxPhase.index) { + if (persisted != null && + persistedMax != null && + persistedMax.index > maxPhase.index) { maxPhase = persistedMax; }