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; }