UI-Restructuring: - TabBar in scan_page durch dedizierte Phasen ersetzt: Sortieren / Beladen / Ausliefern - PhaseBloc + PhaseService leiten Phase aus Tour-/Item-States ab - DeliverySelectionPage (ab 2 Autos) und DeliverySortPage als eigene Flows - LoadingOverviewPage / LoadingCustomerPage für die Beladephase - PhaseStepper-Widget im Home für Phasen-Anzeige - Lager-Differenzierung (Standardlager 0 vs. Außenlager) via WarehouseBadge Process-Stubs: - ProcessRepository für Hold/Cancel/Sort/Assign-Flows (stub, bereit für Backend-Anbindung) Doku: - docs/BACKEND_MIGRATION.md: Phasenplan für Umstellung auf das neue Rust-Backend (OpenAPI-Generator, Keycloak OIDC, Clean-Arch-Layering)
64 lines
2.0 KiB
Dart
64 lines
2.0 KiB
Dart
import '../../../../model/tour.dart';
|
|
|
|
abstract class TourState {}
|
|
|
|
class TourInitial extends TourState {}
|
|
|
|
class TourLoading extends TourState {}
|
|
|
|
class TourLoadingFailed extends TourState {}
|
|
|
|
class TourLoaded extends TourState {
|
|
Tour tour;
|
|
Map<String, double>? distances;
|
|
List<Payment> paymentOptions;
|
|
Map<String, List<String>> sortingInformation;
|
|
|
|
/// Number of scan-related server requests currently in flight. Drives the
|
|
/// inline indicator on the scanner widget. Using a counter (not bool) lets
|
|
/// rapid-fire scans coexist without one prematurely clearing the indicator.
|
|
int pendingScanRequests;
|
|
|
|
/// True während der Backend-Call zur Persistierung der Sortier-Reihenfolge
|
|
/// läuft. Wird vom Bestätigungs-Button in der Sortier-Page für Spinner
|
|
/// und Button-Disabled-State ausgewertet.
|
|
bool isPersistingSorting;
|
|
|
|
/// Letzte Fehlermeldung des Sortier-Persist-Calls. Wird nach Anzeige
|
|
/// durch das UI ge-leert (z. B. nach SnackBar).
|
|
String? sortingPersistError;
|
|
|
|
TourLoaded({
|
|
required this.tour,
|
|
this.distances,
|
|
required this.paymentOptions,
|
|
required this.sortingInformation,
|
|
this.pendingScanRequests = 0,
|
|
this.isPersistingSorting = false,
|
|
this.sortingPersistError,
|
|
});
|
|
|
|
TourLoaded copyWith({
|
|
Tour? tour,
|
|
Map<String, double>? distances,
|
|
List<Payment>? paymentOptions,
|
|
Map<String, List<String>>? sortingInformation,
|
|
int? pendingScanRequests,
|
|
bool? isPersistingSorting,
|
|
String? sortingPersistError,
|
|
bool clearSortingPersistError = false,
|
|
}) {
|
|
return TourLoaded(
|
|
tour: tour ?? this.tour,
|
|
distances: distances ?? this.distances,
|
|
paymentOptions: paymentOptions ?? this.paymentOptions,
|
|
sortingInformation: sortingInformation ?? this.sortingInformation,
|
|
pendingScanRequests: pendingScanRequests ?? this.pendingScanRequests,
|
|
isPersistingSorting: isPersistingSorting ?? this.isPersistingSorting,
|
|
sortingPersistError: clearSortingPersistError
|
|
? null
|
|
: (sortingPersistError ?? this.sortingPersistError),
|
|
);
|
|
}
|
|
}
|