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: Report Model (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 Geolocator für die aktuelle Position.
  • Prüft die Genauigkeit (Warnung bei >10m).
  • Nutzt RegionService, um automatisch Landkreis und Gemeinde zu ermitteln (Offline geodata.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 ImageService und flutter_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):

  1. Der Report wird in die SQLite-DB geschrieben.
  2. Alle zugehörigen ReportImage-Einträge werden erstellt.
  3. Alles passiert in einer Transaktion, um inkonsistente Daten (Bericht ohne Bilder) zu verhindern.