fix(phasen): Tageswechsel laedt Phasen-Stand der neuen Tour (Reset), alter Tag bleibt
Beim Datumswechsel im Kopf-Kalender blieben Beladen/Ausliefern des alten Tags 'erledigt': PhaseBloc._load brach bei bereits geladenem Auto ab und Home stiess den Load nur einmal pro Auto an - der In-Memory-Stand wurde beim Tour-/Token-Wechsel nie invalidiert. Die Persistenz ist bereits pro Tour-Token (syncedAt) getrennt, nur das Nachladen fehlte. - PhaseBloc: Guard tokenbewusst (_loadedTokenByCar); anderer Token laedt den persistierten Stand der neuen Tour nach (neuer Tag -> Eintrittsphase, Rueckkehr -> alter Stand wiederhergestellt) - Home._ensurePhaseLoaded: Guard auf carId|tourToken statt nur carId - Token-Ableitung zentral als TourState.phaseToken (tour_state.dart), genutzt von tourTokenResolver (app.dart) UND Home - eine Quelle statt Duplikat Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -34,7 +34,12 @@ class Home extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _HomeState extends State<Home> {
|
||||
String? _initializedCarId;
|
||||
/// Key `carId|tourToken`, für den der [PhaseBloc] zuletzt zum Laden
|
||||
/// angestoßen wurde. Ändert sich das Auto ODER die Tour-Version
|
||||
/// (Tageswechsel im Kopf-Kalender, neuer Sync), wird erneut geladen — der
|
||||
/// Bloc holt dann den persistierten Stand der **neuen** Tour, sodass ein
|
||||
/// neuer Tag nicht die Beladen-/Ausliefern-Häkchen des alten Tags erbt.
|
||||
String? _initializedPhaseKey;
|
||||
|
||||
/// Merkt, für welches Auto die automatische Lieferungs-Zuordnung bereits
|
||||
/// Auto, für das zuletzt automatisch zugewiesen wurde (Ein-Auto-Teams).
|
||||
@ -75,18 +80,22 @@ class _HomeState extends State<Home> {
|
||||
}
|
||||
|
||||
/// Stellt sicher, dass für das aktuell gewählte Auto eine Phase im
|
||||
/// [PhaseBloc] existiert. Wird im build() reaktiv aufgerufen, daher mit
|
||||
/// `_initializedCarId` gegen mehrfache Loads gesichert.
|
||||
/// [PhaseBloc] existiert — und zwar für die **aktuell geladene Tour**.
|
||||
/// Wird im build() reaktiv aufgerufen, daher per [_initializedPhaseKey]
|
||||
/// (`carId|tourToken`) gegen mehrfache Loads gesichert. Der Token kommt aus
|
||||
/// [TourStatePhaseToken.phaseToken] (derselbe wie im `tourTokenResolver`);
|
||||
/// `null` (keine Tour) zählt dabei als eigener Zustand.
|
||||
///
|
||||
/// Wichtig: Wir feuern den Load erst, sobald sowohl Tour als auch Cars
|
||||
/// einen geladen-Zustand haben — sonst fragt der `PhaseBloc` den
|
||||
/// `carCountResolver` ab, bekommt `null` und entscheidet für Mehr-Auto-
|
||||
/// Teams fälschlich auf `sortieren` statt `auswaehlen`.
|
||||
void _ensurePhaseLoaded(String carId) {
|
||||
if (_initializedCarId == carId) return;
|
||||
final key = '$carId|${context.read<TourBloc>().state.phaseToken}';
|
||||
if (_initializedPhaseKey == key) return;
|
||||
final carsState = context.read<CarsBloc>().state;
|
||||
if (carsState is! CarsLoaded) return;
|
||||
_initializedCarId = carId;
|
||||
_initializedPhaseKey = key;
|
||||
context.read<PhaseBloc>().add(PhaseLoadForCar(carId: carId));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user