fix(phasen): ohne Tour nur erster Schritt aktiv - Stepper sperrt Beladen/Ausliefern

An einem Tag ohne Tour konnte man in der AppBar durch alle Stepper-Schritte
navigieren. Ursache: an leeren Tagen gilt der GETEILTE 'no-tour'-Persistenz-
Eimer; einmal dort aufgeschlossener Fortschritt (hohes Max) machte an JEDEM
leeren Tag Beladen/Ausliefern anklickbar.

- Stepper: ohne geladene Tour (TourEmpty/loading) ist maxReached hart der
  erste sichtbare Schritt -> weitere Schritte nicht anklickbar, keine Haekchen
- PhaseBloc._load: ohne Tour ausschliesslich Eintrittsphase, Persistenz wird
  weder gelesen noch geschrieben (kein Fortschritt im 'no-tour'-Eimer)
- PhaseBloc._set: ohne Tour jeden Vorwaerts-Wechsel verwerfen, nichts
  persistieren - unabhaengig vom ausloesenden Button/Tap

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dennis Nemec
2026-09-09 01:32:14 +02:00
parent 3add6b498e
commit a027c93c62
2 changed files with 35 additions and 1 deletions

View File

@ -125,12 +125,19 @@ class PhaseStepper extends StatelessWidget {
final carCount = carsState is CarsLoaded ? carsState.cars.length : 0;
final phases = visiblePhases ?? _effectivePhases(carCount);
// Ohne geladene Tour (Tag ohne Tour / noch ladend) ist ausschließlich
// der erste Schritt aktiv: es gibt nichts zu beladen oder auszuliefern,
// also dürfen die weiteren Schritte weder anklickbar noch abgehakt
// sein — unabhängig davon, was der PhaseBloc als Max kennt.
final hasTour = context.watch<TourBloc>().state is TourLoaded;
// Höchste erreichte Phase aus dem PhaseBloc — bestimmt, welche
// Vorwärts-Sprünge erlaubt sind.
final phaseBlocState = context.watch<PhaseBloc>().state;
final maxReached = phaseBlocState is PhaseReady
final blocMax = phaseBlocState is PhaseReady
? (phaseBlocState.maxPhaseFor(carId) ?? currentPhase)
: currentPhase;
final maxReached = hasTour ? blocMax : phases.first;
return Material(
color: theme.primaryColor,