fix: Fehlerbehandlung beim Laden und Meldungen überarbeiten
Reklamationen der Fahrer: Meldungen verdeckten Buttons, und nach dem Abschluss stand „Lieferung nicht in der Tour gefunden" ohne Ausweg da. Meldungen: - Erfolgs-SnackBars entfernt, bei Erfolg bleibt der Spinner - einheitliche, schwebende Meldungen statt Stau über den Buttons - Server-Rohtexte durch verständliche Texte ersetzt (api_failure_text) Laden: - fehlt eine geöffnete Lieferung, wird die Tour einmal neu geholt; die Meldung kommt nur nach erfolgreichem Abruf ohne die Lieferung - Endlos-Spinner auf Lieferdetail, Filial-Abholung und Beladen ersetzt durch Kopfzeile, Fehlergrund und „Erneut versuchen" - Tour wird nach einem Tageswechsel nachgeladen, offene Seiten bleiben dabei unberührt - Abschluss und Zuweisung überschreiben kein zwischenzeitliches Neuladen, alte Antworten drehen einen Abschluss nicht mehr zurück - leere Server-Antworten gelten als Fehler statt als „keine Daten" Anmeldung: - Token-Erneuerung wartet höchstens 12 s, der native Aufruf läuft weiter - App-Start ohne Netz zeigt einen Hinweis mit „Erneut versuchen" - Fehlerseite der Fahrzeugauswahl bietet „Abmelden" Außerdem Podfile.lock an die Plugins angeglichen. Tests für die neuen Fehlerpfade ergänzt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -12,8 +12,10 @@ import 'package:hl_lieferservice/feature/delivery/bloc/tour_state.dart';
|
||||
import 'package:hl_lieferservice/feature/delivery/detail/presentation/delivery_detail_page.dart';
|
||||
import 'package:hl_lieferservice/widget/scanner/article_scanner_stripe.dart';
|
||||
import 'package:hl_lieferservice/widget/scanner/item_matcher.dart';
|
||||
import 'package:hl_lieferservice/widget/app_message.dart';
|
||||
import 'package:hl_lieferservice/widget/scanner/manual_entry_dialog.dart';
|
||||
import 'package:hl_lieferservice/widget/scanner/scan_code_parser.dart';
|
||||
import 'package:hl_lieferservice/feature/delivery/overview/presentation/tour_not_loaded_scaffold.dart';
|
||||
|
||||
/// Scan-Screen für die Filial-Abholung in der Auslieferungs-Phase.
|
||||
///
|
||||
@ -40,7 +42,11 @@ class FilialePickupScanPage extends StatefulWidget {
|
||||
State<FilialePickupScanPage> createState() => _FilialePickupScanPageState();
|
||||
}
|
||||
|
||||
class _FilialePickupScanPageState extends State<FilialePickupScanPage> {
|
||||
class _FilialePickupScanPageState extends State<FilialePickupScanPage>
|
||||
with DeliveryPresenceGuard {
|
||||
@override
|
||||
String get guardedDeliveryId => widget.deliveryId;
|
||||
|
||||
static const String _notIntendedMessage =
|
||||
'Dieser Artikel gehört nicht zu dieser Filial-Abholung';
|
||||
|
||||
@ -51,9 +57,7 @@ class _FilialePickupScanPageState extends State<FilialePickupScanPage> {
|
||||
}
|
||||
|
||||
void _showSnackbar(String message) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(message), duration: const Duration(seconds: 2)),
|
||||
);
|
||||
context.showAppMessage(message, duration: const Duration(seconds: 2));
|
||||
}
|
||||
|
||||
/// Nur scanbare, nicht-entfernte Filial-Items dieser Lieferung,
|
||||
@ -172,22 +176,17 @@ class _FilialePickupScanPageState extends State<FilialePickupScanPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocBuilder<TourBloc, TourState>(
|
||||
return BlocConsumer<TourBloc, TourState>(
|
||||
listener: deliveryStillPresent,
|
||||
builder: (context, state) {
|
||||
if (state is! TourLoaded) {
|
||||
return const Scaffold(
|
||||
body: Center(child: CircularProgressIndicator()),
|
||||
);
|
||||
return TourNotLoadedScaffold(title: 'Filial-Abholung', state: state);
|
||||
}
|
||||
final details = state.details;
|
||||
final delivery = _findDelivery(details);
|
||||
if (delivery == null) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Filial-Abholung')),
|
||||
body: const Center(
|
||||
child: Text('Lieferung nicht in der Tour gefunden.'),
|
||||
),
|
||||
);
|
||||
// Der Guard lädt gerade neu oder das Neuladen ist gescheitert.
|
||||
return TourNotLoadedScaffold(title: 'Filial-Abholung', state: state);
|
||||
}
|
||||
|
||||
final recipient = details.recipientOf(delivery);
|
||||
@ -242,9 +241,10 @@ class _FilialePickupScanPageState extends State<FilialePickupScanPage> {
|
||||
],
|
||||
),
|
||||
),
|
||||
if (allDone) _DoneBar(onConfirm: _openDelivery),
|
||||
],
|
||||
),
|
||||
bottomNavigationBar:
|
||||
allDone ? _DoneBar(onConfirm: _openDelivery) : null,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user