fix: Tour-Datum — Leer-Texte, veraltete Antworten, Kalenderfenster
- Leer-Ansichten (Auswählen, Sortieren, Beladen, Ausliefern) nennen den gewählten Tag statt immer „heute": „Für den 02.09.2026 ist keine Tour zugewiesen." (TourDayText). - TourBloc: Loads/Refreshes laufen nebenläufig; bei schnellem Datumswechsel konnte die langsamere Antwort des vorigen Tages die Tour des gewählten Tages überschreiben. Jetzt schreibt nur die jüngste Anfrage ihr Ergebnis. - Kalender reicht 90 statt 14 Tage zurück (z. B. nachimportierte Touren vom Monatsanfang). - Test: neuer Fahrer startet auf „heute", auch wenn der vorige einen anderen Tag gewählt hatte. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -72,6 +72,12 @@ class TourBloc extends Bloc<TourEvent, TourState> {
|
||||
/// damit ein Pull-to-refresh denselben Tag neu lädt (nicht heute).
|
||||
DateTime? _selectedDate;
|
||||
|
||||
/// Laufnummer der Tour-Anfragen. Loads/Refreshes laufen nebenläufig; wählt
|
||||
/// der Fahrer schnell nacheinander zwei Tage, darf die langsamere Antwort
|
||||
/// des ersten Tages die des zuletzt gewählten nicht überschreiben. Nur die
|
||||
/// jüngste Anfrage schreibt ihr Ergebnis.
|
||||
int _requestSeq = 0;
|
||||
|
||||
/// Räumt verwaiste Cache-Bilder weg, sobald frische Tour-Daten vorliegen.
|
||||
/// Fire-and-forget — Cache-Pflege darf den Load nie verzögern oder
|
||||
/// scheitern lassen.
|
||||
@ -85,9 +91,11 @@ class TourBloc extends Bloc<TourEvent, TourState> {
|
||||
// Nur bei explizit gesetztem Datum die Wahl aktualisieren; ein reiner
|
||||
// Reload (LoadTour()) behält den aktuell angezeigten Tag.
|
||||
if (event.hasDate) _selectedDate = event.date;
|
||||
final seq = ++_requestSeq;
|
||||
emit(const TourLoading());
|
||||
try {
|
||||
final details = await tourRepository.getMyTourDetails(date: _selectedDate);
|
||||
if (seq != _requestSeq) return; // überholt von neuerer Anfrage
|
||||
if (details == null) {
|
||||
emit(const TourEmpty());
|
||||
return;
|
||||
@ -95,6 +103,7 @@ class TourBloc extends Bloc<TourEvent, TourState> {
|
||||
emit(TourLoaded(details: details));
|
||||
_pruneAttachmentCache(details);
|
||||
} catch (e, st) {
|
||||
if (seq != _requestSeq) return;
|
||||
debugPrint('TourBloc.LoadTour fehlgeschlagen: $e\n$st');
|
||||
final message = _messageOf(e, 'Tour konnte nicht geladen werden');
|
||||
emit(TourLoadFailed(message: message));
|
||||
@ -113,9 +122,11 @@ class TourBloc extends Bloc<TourEvent, TourState> {
|
||||
return;
|
||||
}
|
||||
|
||||
final seq = ++_requestSeq;
|
||||
emit(current.copyWith(isRefreshing: true, refreshError: null));
|
||||
try {
|
||||
final details = await tourRepository.getMyTourDetails(date: _selectedDate);
|
||||
if (seq != _requestSeq) return; // überholt von neuerer Anfrage
|
||||
if (details == null) {
|
||||
emit(const TourEmpty());
|
||||
return;
|
||||
@ -123,6 +134,7 @@ class TourBloc extends Bloc<TourEvent, TourState> {
|
||||
emit(TourLoaded(details: details));
|
||||
_pruneAttachmentCache(details);
|
||||
} catch (e, st) {
|
||||
if (seq != _requestSeq) return;
|
||||
debugPrint('TourBloc.RefreshTour fehlgeschlagen: $e\n$st');
|
||||
final message = _messageOf(e, 'Tour konnte nicht neu geladen werden');
|
||||
// alten Stand sichtbar lassen, Fehler oben mitführen
|
||||
|
||||
Reference in New Issue
Block a user