Flutter: Offline-Queue für Kontroll-Erfassung (Prompt 17-Härtung)
CI / backend-tests (push) Successful in 1m5s
CI / frontend-build (push) Successful in 22s

lib/offline/queue.dart (sqflite) analog zur React-PWA-Queue: enqueue statt
Direkt-Senden, Status wartet/wird_uebertragen/fehler, Idempotenz, Sync bei
Reconnect (connectivity_plus) + periodisch alle 15s. KontrollScreen gleicht
per 2s-Reconciliation-Loop den Anzeigezustand ab, "Kein Netz"-Banner.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-04 18:36:10 +02:00
co-authored by Claude Sonnet 5
parent c71df1ac4d
commit c68d39b45f
6 changed files with 421 additions and 77 deletions
+11 -7
View File
@@ -2,7 +2,8 @@
Zweiter Client derselben API (Prompt 19 API-first-Prinzip) neben der React-PWA
(`frontend/`). Deckt Login, Objektliste, Kontroll-Screen (Start/Sperre-Übernahme/
Positionen/Abschluss/Abbruch) ab.
Positionen/Abschluss/Abbruch) sowie eine Offline-Queue (Prompt 17-Härtung,
`lib/offline/queue.dart`, sqflite) ab.
## Wichtig: Plattform-Ordner fehlen noch
@@ -44,13 +45,16 @@ Für iOS entsprechend in `ios/Runner/Info.plist`:
<string>Wird zum Scannen von Objekt-/Geräte-Codes benötigt.</string>
```
## Offline-Queue (Prompt 17-Härtung)
`lib/offline/queue.dart`: Positionen werden lokal in sqflite zwischengespeichert
(`enqueue`), Status je Eintrag (`wartet`/`wird_uebertragen`/`fehler`), Sync bei
Reconnect (`connectivity_plus`) und periodisch alle 15s - gleiches Muster wie
`frontend/src/offline/queue.ts` (IndexedDB), nur die lokale DB ist anders.
`KontrollScreen` gleicht per 2s-Reconciliation-Loop den Anzeigezustand mit der
Queue ab, Abschluss ist gesperrt, solange Einträge offen sind.
## Bewusst noch nicht umgesetzt (Unterschied zur React-PWA)
- **Keine Offline-Queue**: anders als die PWA (`frontend/src/offline/queue.ts`,
IndexedDB) sendet diese erste Fassung Positionen direkt; bei Netzwerkfehler
erscheint nur eine "erneut versuchen"-Meldung, keine automatische
Zwischenspeicherung/Sync bei Reconnect. Nachziehen, sobald die App über das
Grundgerüst hinauswächst - gleiches Muster wie in der PWA übertragbar
(z. B. `sqflite` oder `hive` statt IndexedDB).
- Keine Tests (Flutter-Widget-/Integrationstests) - Sprintplan sieht Testphase 4
primär für die PWA vor (Playwright); Android-Testabdeckung ist noch offen.