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:
@ -93,3 +93,22 @@ const Object _sentinel = Object();
|
||||
class TourEmpty extends TourState {
|
||||
const TourEmpty();
|
||||
}
|
||||
|
||||
/// Token, der die aktuell geladene **Tour-Version** identifiziert (aus
|
||||
/// `Tour.syncedAt`). Der `PhaseBloc` bindet die persistierten Phasen-Häkchen
|
||||
/// daran: ein Tageswechsel im Kopf-Kalender oder ein neuer Sync ergibt einen
|
||||
/// neuen Token und damit einen eigenen, getrennten Phasen-Stand. `null` =
|
||||
/// keine Tour geladen (z. B. `TourEmpty`).
|
||||
///
|
||||
/// **Einzige Quelle** für diese Ableitung — wird vom `tourTokenResolver` in
|
||||
/// `app.dart` UND von `Home._ensurePhaseLoaded` genutzt, damit beide Seiten
|
||||
/// garantiert denselben Token sehen und ein Tour-Wechsel zuverlässig als
|
||||
/// solcher erkannt wird.
|
||||
extension TourStatePhaseToken on TourState {
|
||||
String? get phaseToken {
|
||||
final s = this;
|
||||
return s is TourLoaded
|
||||
? s.details.tour.syncedAt.millisecondsSinceEpoch.toString()
|
||||
: null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user