# Oggauer Gemeindetrommler đŸ„ Die **Oggauer Gemeindetrommler App** ist eine mobile Anwendung (Flutter fĂŒr Android & iOS) fĂŒr BĂŒrgerinnen und BĂŒrger der Marktgemeinde Oggau am Neusiedler See. Sie dient als digitale Plattform fĂŒr Gemeinde-Nachrichten, BĂŒrgeranliegen (MĂ€ngelmeldungen mit Foto-Upload) sowie den Austausch im BĂŒrgerforum bzw. die Einbringung von Gemeinde-Ideen inklusive PDF-Exportfunktionen. --- ## đŸ“± Aktueller Funktionsumfang (Ist-Zustand) Die App wurde in ihrer Erstversion mit UnterstĂŒtzung von KI (frĂŒhe GPT-Modelle) entwickelt und nutzt Firebase als Backend. ### 1. Neuigkeiten (`News`) - Liste aktueller Berichte und Neuigkeiten aus der Gemeinde mit Datum, Überschrift, Textvorschau und Beitragsbild. - Detailansicht mit vollstĂ€ndigem Text und großem Beitragsbild. - PDF-Export: Sowohl EinzelbeitrĂ€ge als auch eine Mehrfachauswahl können direkt als PDF generiert und geteilt werden. ### 2. MĂ€ngelĂŒbersicht & MĂ€ngelmeldung (`Issues`) - Übersicht ĂŒber gemeldete MĂ€ngel im Ortsgebiet (chronologisch sortiert). - Erfassung neuer MĂ€ngel mit Titel, Beschreibungstext und Foto (Kamera oder Galerie). - Automatischer Zuschnitt (1:1 Quadrat) und GrĂ¶ĂŸenvalidierung (< 10 MB). - Eigene Meldungen können per Wischgeste (Swipe-to-Delete) entfernt werden. - Mehrfachauswahl von MĂ€ngeln mit Sammel-PDF-Export (z. B. zur Weiterleitung an den Bauhof). ### 3. BĂŒrgerForum / Ideen (`CitizensForum`) - Plattform zur Einbringung von Anregungen und VorschlĂ€gen fĂŒr das Gemeindeleben. - Nutzt aktuell den gleichen Erfassungs- und PDF-Export-Workflow wie bei den MĂ€ngeln. ### 4. Authentifizierung (`AuthState`) - Anonyme Firebase-Authentifizierung (`FirebaseAuth.signInAnonymously`). - Lesemodus fĂŒr GĂ€ste; Erstellen und Löschen eigener BeitrĂ€ge ist an den angemeldeten Nutzerstatus gekoppelt. --- ## 🔍 Soll vs. Ist Abgleich (Original-Anforderungen) Basierend auf dem ursprĂŒnglichen Lastenheft von Thomas und den UI-Wireframes (`App (1).xlsx`) ergibt sich folgender Umsetzungsstatus: | Anforderung / Modul | UrsprĂŒngliche Spezifikation | Aktueller Umsetzungsstatus | Status | |---|---|---|---| | **Startseite / News** | 2-Zeilen-Vorschau, Trennlinie, Volltextsuche (Lupe), Detailansicht, PDF/JPG-AnhĂ€nge | Überschrift, Datum, 3 Zeilen Text, Bild, Detailansicht | 🟡 Teilweise (Suche fehlt, nur 1 Bild) | | **MĂ€ngelĂŒbersicht** | Liste, Volltextsuche, PDF-Tabellendruck einer Auswahl | Liste vorhanden, Checkbox-Auswahl + PDF-Druck integriert | 🟡 Teilweise (Suche & Tabellenlayout im PDF fehlen) | | **MĂ€ngelerfassung** | Pflicht-Dropdown fĂŒr Straße/Ort, Dropdown fĂŒr Grundlage, max. 2 Fotos im Querformat (max. 800x600), automatischer Verfasser | Titel, Beschreibung, 1 Foto im Quadrat (1:1). Keine Dropdowns | 🔮 Wesentliche Felder fehlen | | **Ideen** | Wie MĂ€ngel, bis zu 5 AnhĂ€nge (PDF/Bilder), kein Druck erforderlich | Als „BĂŒrgerForum“ realisiert, aber identische Maske zu MĂ€ngeln (nur 1 Bild) | 🟡 Teilweise (Mehrfach-Upload bis 5 Dateien fehlt) | | **Kontakt** | Freitext, Name, Nachname, E-Mail (Pflicht), RĂŒckrufnummer (optional), E-Mail-Versand, Rechtshinweis | Nicht im MenĂŒ eingebunden; nur Registrier-Fragmente vorhanden | 🔮 Fehlt komplett | | **Information / Impressum** | Öffentliche Gemeinde-Infos, Veranstaltungen, Impressum ohne Login frei zugĂ€nglich | Nicht vorhanden | 🔮 Fehlt komplett | | **Zugangsschutz / Auth** | GemeindebĂŒrger-Zugang via Passwort/Freigabe; nur Info-Bereich offen | Anonymer Login per Knopfdruck fĂŒr alle; Fragmente fĂŒr E-Mail-Login | 🔮 Entspricht nicht dem Passwort-Konzept | | **Design & Header** | Neutraler Hintergrund, optionales Betreiber-Logo im Header | Schlichter Material-AppBar-Header ohne Logo | 🟡 Optimierbar | --- ## đŸ—ïž Technische Architektur & Tech-Stack ### Verwendete Technologien: - **Framework:** [Flutter](https://flutter.dev) (Dart SDK `>=2.18.2 <3.0.0` / Dart 3 kompatibel) - **Backend / Cloud Services (Firebase):** - `firebase_core` (Core-Initialisierung) - `firebase_auth` (Authentifizierung) - `cloud_firestore` (NoSQL Echtzeitdatenbank fĂŒr News, MĂ€ngel, Ideen) - `firebase_storage` (Speicherung hochgeladener Bilder) - **PDF-Erstellung & Druck:** `pdf`, `printing` - **Bildverarbeitung:** `image`, `image_picker`, `image_cropper`, `cached_network_image` - **State Management:** `provider` ### Projektstruktur (`lib/`): ```text lib/ ├── firebase_options.dart # Firebase-Projektkonfiguration (Android & iOS) ├── main.dart # App-Einstiegspunkt, Firebase Init & MultiProvider ├── models/ │ └── post_item.dart # Typisiertes Datenmodell fĂŒr News, MĂ€ngel & Ideen ├── screens/ │ ├── add_issue_screen.dart # MĂ€ngelerfassung mit Straßenauswahl & bis zu 2 Fotos │ ├── add_post_screen.dart # Universelle Erfassung fĂŒr News & BĂŒrgerideen │ ├── auth_dialog.dart # Anmelde-, Registrierungs- & Code-Freischaltungs-Dialog │ ├── contact_screen.dart # BĂŒrgerforum-Kontaktformular & Anfragen │ ├── detail_screen.dart # Detailansicht mit Metadaten & PDF-Einzelexport │ ├── home_screen.dart # Haupt-Scaffold mit 5 Tabs (News, MĂ€ngel, Ideen, Kontakt, Info) │ ├── info_screen.dart # BĂŒrgerforum Leitbild, Notrufnummern & Account-Status │ └── post_list_screen.dart # Universelle Listenansicht, Echtzeitsuche & PDF-Tabelle └── services/ ├── auth_service.dart # Hybrid-Auth (E-Mail/Passwort, BĂŒrger-Code, Anonym) ├── firestore_service.dart# NoSQL CRUD & Kontaktanfragen ├── pdf_service.dart # PDF-Druckerzeugung (Listen & Einzelansichten) └── storage_service.dart # Optimierter Bild-Upload (Querformat max 800x600) ``` --- ## đŸ€– CI/CD Pipeline (Gitea Actions) Die App verfĂŒgt ĂŒber eine vollautomatische Build-Pipeline fĂŒr **Gitea Actions** (`.gitea/workflows/build-apk.yaml`): ### Funktionen der Pipeline: - **Automatische Trigger:** Wird bei jedem `push` auf `main`, `master`, `refactor/**`, bei Git-Tags (`v*`) oder manuell im Webinterface (`workflow_dispatch`) ausgelöst. - **Isolierte Build-Umgebung:** Nutzt das offizielle `ghcr.io/cirruslabs/flutter:3.19.3` Docker-Image mit vorinstalliertem Android SDK, Java 17 und Flutter. - **QualitĂ€tssicherung:** FĂŒhrt automatisch `flutter analyze` und `flutter test` aus, bevor der Build startet. - **VollstĂ€ndige APK-Generierung:** - `oggauer-gemeindetrommler-universal-release.apk` (Universelle Release-APK fĂŒr alle Android-GerĂ€te) - `oggauer-gemeindetrommler-arm64-v8a.apk` (FĂŒr moderne 64-Bit Smartphones) - `oggauer-gemeindetrommler-armeabi-v7a.apk` (FĂŒr Ă€ltere 32-Bit Smartphones) - `oggauer-gemeindetrommler-x86_64.apk` (FĂŒr Emulatoren & ChromeOS) - **Artifact-Upload:** Speichert die fertigen APKs als herunterladbare ZIP-Datei (`oggauer-gemeindetrommler-apks`) direkt im Gitea Run-Dashboard. ### APKs in Gitea herunterladen: 1. Im Gitea-Repository auf den Reiter **Aktionen** (*Actions*) klicken. 2. Den gewĂŒnschten Pipeline-Durchlauf auswĂ€hlen. 3. Im Abschnitt **Artefakte** (*Artifacts*) das Paket `oggauer-gemeindetrommler-apks` herunterladen. --- ## đŸ› ïž Einrichtung & Lokaler Start ### Voraussetzungen 1. **Flutter SDK** (empfohlen: `>= 3.19.x`) 2. **Dart SDK** (enthalten in Flutter) 3. **Android Studio** / **Xcode** (fĂŒr Emulatoren oder physische GerĂ€te) 4. Konfiguriertes Firebase-Projekt (`gemeinde-trommler`) ### Installation & AusfĂŒhrung ```bash # 1. AbhĂ€ngigkeiten installieren flutter pub get # 2. Statische Code-Analyse ausfĂŒhren flutter analyze # 3. Tests ausfĂŒhren flutter test # 4. App lokal starten flutter run ``` --- ## 📄 Lizenz & Urheberschaft Entwickelt fĂŒr das **BĂŒrgerforum Oggau**. Private & gemeinnĂŒtzige Verwendung.