123 lines
7.0 KiB
Markdown
123 lines
7.0 KiB
Markdown
# 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/
|
|
├── AddPage.dart # Erfassungsdialog für Beiträge, Mängel & Ideen (Upload, Crop)
|
|
├── DetailPage.dart # Detailansicht für einzelne Beiträge inkl. PDF-Export
|
|
├── LoginPage.dart # (Fragment) E-Mail/Passwort-Loginmaske (nicht verdrahtet)
|
|
├── register.dart # (Fragment) Registrierungsmaske (nicht verdrahtet)
|
|
├── UserDefinedList.dart # Universelle Listenanzeige, Firestore-Stream, Selektion & Sammel-PDF
|
|
├── anonym_aut.dart # AuthState Provider & einfacher anonymer Login-Screen
|
|
├── firebase_options.dart # Firebase-Projektkonfiguration (Android & iOS)
|
|
├── home.dart # Haupt-Scaffold mit BottomNavigationBar (4 Tabs)
|
|
└── main.dart # App-Einstiegspunkt, Firebase Init & MultiProvider
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ 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. App starten
|
|
flutter run
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Empfohlene Verbesserungen & Roadmap
|
|
|
|
Die Erstellung durch frühe KI-Modelle hat zu funktionalen Proof-of-Concepts geführt, weist jedoch typischen Refactoring-Bedarf auf:
|
|
|
|
1. **Code-Hygiene & Best Practices:**
|
|
- Umbenennung der Dateien nach Dart-Konvention (`snake_case`, z. B. `add_page.dart`, `detail_page.dart`).
|
|
- Behebung der `flutter analyze` Warnungen (Deprecations wie `enablePersistence`, `BuildContext` across async gaps, ungenutzte Imports).
|
|
- Saubere Abhängigkeitsdeklaration (`http` direkt in `pubspec.yaml` aufnehmen).
|
|
2. **Architektur & Wartbarkeit:**
|
|
- Trennung von UI und Business-Logik (Einführung von Repositories / Services für Firestore und Firebase Storage).
|
|
- Auslagerung der CPU-intensiven Bildverarbeitung (`image.decodeImage`) in Isolate (`compute`), um UI-Ruckler zu vermeiden.
|
|
3. **Vervollständigung der Fachanforderungen:**
|
|
- **Kontakt-Formular:** Umsetzung mit Pflichtfeldern und Mail-Trigger (z. B. via Firebase Extension `Trigger Email` oder Cloud Function).
|
|
- **Informationen / Impressum / Veranstaltungen:** Fünfter Tab gemäß Anforderung.
|
|
- **Mängelmeldung:** Dropdown für Straßenverzeichnis Oggau und Grundlage; Unterstützung von bis zu 2 Fotos im Querformat.
|
|
- **Volltextsuche:** Suchleiste / Suchsymbol in den Listenansichten.
|
|
- **Zugangskonzept:** Echtes Bürger-Passwort bzw. PIN-Schutz statt reinem anonymen Login.
|
|
|
|
---
|
|
|
|
## 📄 Lizenz & Urheberschaft
|
|
Erstellt für die Marktgemeinde Oggau am Neusiedler See. Private Verwendung.
|