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
MABEA Android-App (Flutter) – erstes Grundgerüst
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) sowie eine Offline-Queue (Prompt 17-Härtung,
lib/offline/queue.dart, sqflite) ab.
Wichtig: Plattform-Ordner fehlen noch
Dieses Verzeichnis enthält nur lib/, pubspec.yaml, analysis_options.yaml -
die von flutter create generierten Plattform-Ordner (android/, ios/, Gradle-
Konfiguration etc.) wurden bewusst NICHT von Hand nachgebaut, da das ohne
Testlauf zu fehleranfällig wäre. Erstinbetriebnahme auf dem Zielsystem (mit
Flutter-SDK installiert):
cd flutter_app
flutter create . --platforms android --org de.perlbach24 --project-name mabea_app
# überschreibt pubspec.yaml NICHT automatisch mit *nix cp -n, ggf. lib/-Inhalt
# und pubspec.yaml-Dependencies danach gegen diese Version abgleichen
flutter pub get
flutter build apk
API-Adresse
lib/main.dart: kApiBaseUrl ist aktuell fest auf den Deployment-Server
(192.168.1.238) gesetzt. Für Produktivbetrieb auf --dart-define umstellen
oder zumindest vor jedem Build prüfen/anpassen.
Kamera-Berechtigung (Kamera-Scan, Karte 10)
mobile_scanner braucht die Kamera-Berechtigung im generierten android/-Ordner
(existiert erst nach flutter create ., siehe oben) - nach dem Erstlauf einmalig
in android/app/src/main/AndroidManifest.xml ergänzen, oberhalb von <application>:
<uses-permission android:name="android.permission.CAMERA" />
Für iOS entsprechend in ios/Runner/Info.plist:
<key>NSCameraUsageDescription</key>
<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 Tests (Flutter-Widget-/Integrationstests) - Sprintplan sieht Testphase 4 primär für die PWA vor (Playwright); Android-Testabdeckung ist noch offen.