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) <noreply@anthropic.com>
This commit is contained in:
Dennis Nemec
2026-09-09 01:25:20 +02:00
parent 7c6f99dda1
commit 3add6b498e

View File

@ -95,14 +95,29 @@ class PhaseBloc extends Bloc<PhaseEvent, PhaseState> {
return; 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 { try {
final persisted = await phaseService.load(event.carId, token); final persisted = await phaseService.load(event.carId, token);
final persistedMax = await phaseService.loadMax(event.carId, token); final persistedMax = await phaseService.loadMax(event.carId, token);
final phase = persisted ?? _entryPhase(); final phase = persisted ?? _entryPhase();
// Max ist mindestens die aktuelle Phase. Falls in der Persistenz ein // Max ist mindestens die aktuelle Phase. Ein höheres persistiertes Max
// höherer Wert steht (Rücksprung), den nehmen. // (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; DeliveryPhase maxPhase = phase;
if (persistedMax != null && persistedMax.index > maxPhase.index) { if (persisted != null &&
persistedMax != null &&
persistedMax.index > maxPhase.index) {
maxPhase = persistedMax; maxPhase = persistedMax;
} }