Erfassungs-Logik
Die Erfassung von Mistel-Daten (“Reporting”) ist ein zentraler Prozess der App.
Komponenten
- UI:
ReportScreen(lib/screens/report_screen.dart) - Logik:
ReportController(lib/controllers/report_controller.dart) - Daten:
ReportModel (lib/models/report.dart)
Der 3-Schritt-Assistent (Stepper)
Der ReportController verwaltet den Zustand des Stepper-Widgets im UI.
stateDiagram-v2
[*] --> Standort: Start
Standort --> Details: GPS gefunden / Karte gewählt
Details --> Bilder: Daten (Baumart, Befall...) erfasst
Bilder --> Speichern: Fotos gemacht
Speichern --> [*]: DB Transaction
1. Standort (_buildLocationStep)
- Nutzt
Geolocatorfür die aktuelle Position. - Prüft die Genauigkeit (Warnung bei >10m).
- Nutzt
RegionService, um automatisch Landkreis und Gemeinde zu ermitteln (Offlinegeodata.db).
2. Details (_buildDetailsStep)
- Slider & Chips: Für schnelle Eingabe von Befallsstärke (Severity), Vitalität und Pflegeaufwand.
- Audio: Ermöglicht Sprachnotizen via
AudioRecorder.
3. Bilder (_buildImagesStep)
- Nutzt
ImageServiceundflutter_image_compress(native Kompression). - Bilder werden asynchron im Hintergrund verarbeitet (“Yank”-Optimierung), während der User weitermacht.
Speichern & Transaktion
Die Methode submitReport bündelt alle Daten.
Das Speichern erfolgt transaktional im DatabaseHelper (saveReportWithImages):
- Der
Reportwird in die SQLite-DB geschrieben. - Alle zugehörigen
ReportImage-Einträge werden erstellt. - Alles passiert in einer Transaktion, um inkonsistente Daten (Bericht ohne Bilder) zu verhindern.