diff --git a/README.md b/README.md index 501ae09..b2c4dcf 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,151 @@ # 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. +Die **Oggauer Gemeindetrommler App** ist die offizielle Smartphone-Anwendung (Flutter fĂŒr Android & iOS) des **BĂŒrgerforums Oggau** fĂŒr alle BĂŒrgerinnen und BĂŒrger der Marktgemeinde Oggau am Neusiedler See. + +Die App vereint aktuelle Gemeinde-Nachrichten, offizielle PDF-Aussendungen des BĂŒrgerforums, einen bĂŒrgernahen MĂ€ngelmelder mit Foto-Upload, eine Ideenplattform sowie einen direkten Kontaktkanal mit integriertem Admin-Posteingang und vollstĂ€ndiger In-App-Benutzerverwaltung. --- -## đŸ“± Aktueller Funktionsumfang (Ist-Zustand) +## đŸ“± Funktionsumfang & Module -Die App wurde in ihrer Erstversion mit UnterstĂŒtzung von KI (frĂŒhe GPT-Modelle) entwickelt und nutzt Firebase als Backend. +### 1. 📰 Nachrichten & Offizielle PDF-Aussendungen (`News`) +- **Chronologischer Feed:** Vereint manuell erstellte Gemeinde-Nachrichten und die offiziellen Rundschreiben/Aussendungen des BĂŒrgerforums nach Datum sortiert (neueste zuerst). +- **WordPress REST-API Anbindung:** Vollautomatische Synchronisation der Aussendungen von [buergerforumoggau.at](https://buergerforumoggau.at/category/aktuelles/aussendungen/) inklusive HTML-Bereinigung und PDF-Extraktion. +- **Offline-First:** Geladene Aussendungen werden lokal via `SharedPreferences` zwischengespeichert und stehen sofort beim App-Start sowie offline zur VerfĂŒgung. +- **Integrierter PDF-Reader:** + - FlĂŒssige In-App-Vorschau ohne externe App zwingend öffnen zu mĂŒssen. + - **Stufenloser Zoom:** Gesten-Zoom (Pinch-to-Zoom von 0.8x bis 5.0x) und schwebendes Bedienfeld (`+`, `-`, `1:1` Reset auf 100%). + - **Drucken & Teilen:** Direktes Teilen von PDFs via `Printing.sharePdf` und System-Druckfunktion. + - **Browser-Aufruf:** Öffnen des Original-Dokuments im Standard-Webbrowser oder externen PDF-Viewer. +- **Filter-Leiste:** Schnelles Filtern nach `Alle`, `Aussendungen (PDF)` und `Aktuelles`. +- **Echtzeitsuche & PDF-Export:** Volltextsuche in BeitrĂ€gen sowie Export von EinzelbeitrĂ€gen oder TabellenĂŒbersichten als PDF. +- **Redaktions-Funktion:** Berechtigte Administratoren können neue Nachrichten direkt ĂŒber die App mit Titel, Text und Beitragsbild erfassen. -### 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Ă€ngelmelder (`Issues`) +- **MĂ€ngelĂŒbersicht:** Chronologische Liste aller im Gemeindegebiet gemeldeten MĂ€ngel mit Bildvorschau, Status und Ortsangabe. +- **Strukturierte Erfassung:** + - Titel und detaillierte Beschreibung. + - Kategorie-Auswahl (z. B. Straßenbeleuchtung, StraßenschĂ€den, GrĂŒnflĂ€chen, MĂŒll, SpielplĂ€tze). + - Pflicht-Dropdown aller offiziellen Straßen in Oggau. + - Bis zu 2 Fotos (Aufnahme direkt per Kamera oder Auswahl aus der Galerie). + - Automatische Bildkomprimierung und Speicheroptimierung (< 10 MB). +- **Status-Workflow:** Verwaltung durch Administratoren (`Gemeldet` $\rightarrow$ `In Bearbeitung` $\rightarrow$ `Behoben`). +- **Sammel-PDF-Druck:** Mehrfachauswahl gemeldeter MĂ€ngel mit tabellarischem PDF-Export (ideal zur Weiterleitung an den Bauhof oder Gemeinderat). +- **Löschfunktion:** Verfasser und Administratoren können Meldungen per Wischgeste entfernen. -### 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`) +- BĂŒrger-Beteiligungsplattform fĂŒr Anregungen, Projektideen und Initiativen zur Dorfentwicklung. +- Erfassung mit Titel, Freitextbeschreibung und bis zu 2 Fotos/AnhĂ€ngen. +- PDF-Export und DruckunterstĂŒtzung zur Vorstellung in AusschĂŒssen oder Sitzungen. -### 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. 📬 Kontakt & Admin-Posteingang (`Contact`) +- **BĂŒrger-Kontaktformular:** + - Einfache und direkte Kontaktaufnahme mit dem BĂŒrgerforum. + - Pflichtangaben: Name, E-Mail-Adresse und Anliegen. + - Optionale RĂŒckruf-Telefonnummer fĂŒr schnelle RĂŒckfragen. + - Rechtlicher Datenschutzhinweis. +- **Admin-Posteingang (`AdminMessagesScreen`):** + - Administratoren haben direkten Zugriff auf alle ĂŒber die App eingesendeten BĂŒrgernachrichten. + - **Echtzeit-Aktualisierung** via Firestore. + - **Filter-Chips:** Schnelles Filtern nach `Alle`, `Neu`, `In Bearbeitung` und `Erledigt`. + - **Volltextsuche:** Durchsucht Betreff, Nachrichtentext, Absender-Name und E-Mail-Adresse. + - **Detail-Ansicht (Bottom Sheet):** + - VollstĂ€ndiger Nachrichtentext mit Metadaten und Zeitstempel. + - Statuswechsel (`Neu`, `In Bearbeitung`, `Erledigt`). + - Ein-Klick-Aktionen: Direkte E-Mail-Antwort (`mailto:`) und Anruf (`tel:`). + - Sicheres Löschen erledigter Nachrichten. -### 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. +### 5. â„č BĂŒrgerforum-Info, Leitbild & In-App-Benutzerverwaltung (`Info`) +- **Leitbild & Über uns:** Informationen ĂŒber die GrundsĂ€tze, Ziele und AktivitĂ€ten des BĂŒrgerforums Oggau. +- **Notrufnummern:** Wichtige Notfallkontakte (Feuerwehr, Polizei, Rettung, Euronotruf, Vergiftungszentrale, etc.) auf einen Blick mit direkter Anruffunktion. +- **Benutzerkonto-Status:** Transparente Anzeige des Anmeldestatus (`Gast`, `BĂŒrger`, `Administrator`). +- **In-App-Benutzerverwaltung (`UserManagementScreen`):** + - Keine Notwendigkeit mehr, fĂŒr die Rollenvergabe die Firebase Console zu öffnen. + - VollstĂ€ndige Liste aller registrierten BĂŒrger mit Such- und Filterfunktion (`Alle`, `Administratoren`, `BĂŒrger`). + - **Admin-Rechte verwalten:** Beförderung zum Administrator oder Entzug von Admin-Rechten mit einem Klick (inklusive Sicherheits-BestĂ€tigungsdialog). + - **Selbstentzugs-Schutz:** Der angemeldete Admin kann sich nicht versehentlich selbst die Administrationsrechte entziehen. + - **Manuelle Admin-Freischaltung:** ZusĂ€tzliche Dialog-Eingabe zur direkten Autorisierung per E-Mail oder UID. --- -## 🔍 Soll vs. Ist Abgleich (Original-Anforderungen) +## 🔒 Sicherheitsarchitektur (Backend & Frontend) -Basierend auf dem ursprĂŒnglichen Lastenheft von Thomas und den UI-Wireframes (`App (1).xlsx`) ergibt sich folgender Umsetzungsstatus: +Die Sicherheit und IntegritĂ€t der BĂŒrgerdaten wird durch ein mehrstufiges Sicherheitskonzept gewĂ€hrleistet: -| 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 | +1. **Firestore Security Rules (`firestore.rules`):** + - **`/Users/{userId}`:** Nutzer können ihr eigenes Profil lesen und pflegen. Nur Administratoren (`isAdmin()`) haben Vollzugriff auf alle Benutzerprofile. + - **`/Admins/{adminDoc}`:** Schreib- und Löschrechte sind strikt auf bestehende Administratoren beschrĂ€nkt. + - **`/ContactMessages/{doc}`:** Eingereichte Kontaktanfragen können ausschließlich von Administratoren oder dem jeweiligen Verfasser gelesen werden. StatusĂ€nderungen und Löschungen sind Administratoren vorbehalten. + - **`/News/{newsId}`:** Erstellen und Löschen von News-BeitrĂ€gen ist nur fĂŒr Administratoren gestattet. + - **`/Issues` & `/CitizensForum`:** Angemeldete Nutzer dĂŒrfen eigene BeitrĂ€ge erfassen und löschen; Admins dĂŒrfen den Bearbeitungsstatus pflegen. +2. **Cloud Storage Rules (`storage.rules`):** + - Uploads sind auf angemeldete Nutzer, DateigrĂ¶ĂŸen unter 10 MB und gĂŒltige Bildformate (`image/*`) limitiert. + - Fotos dĂŒrfen ausschließlich vom ursprĂŒnglichen Verfasser oder von einem berechtigten Administrator gelöscht werden. +3. **Automatische Profil-Synchronisation:** + - Bei jeder Anmeldung oder Registrierung gleicht `AuthService` das Benutzerprofil mit Firestore (`Users/{uid}`) ab. + +--- + +## 📊 Umsetzungsstatus (Soll vs. Ist) + +| Anforderung / Modul | Spezifikation & Features | Umsetzungsstatus | Status | +|---|---|---|:---:| +| **News & Aussendungen** | Chronologischer Feed, Volltextsuche, PDF-Aussendungen der Webseite, Zoom-Viewer, PDF-Export | VollstĂ€ndig integriert (WordPress REST-API, In-App Zoom Reader, Filter-Chips) | 🟱 Erledigt | +| **MĂ€ngelĂŒbersicht** | Chronologische Liste, Straßenauswahl, Volltextsuche, Tabellen-PDF-Export, Status-Tracking | VollstĂ€ndig integriert (Dropdown aller Oggauer Straßen, Statusanzeige, PDF-Export) | 🟱 Erledigt | +| **MĂ€ngelerfassung** | Pflicht-Straße, Kategorie, max. 2 Fotos, automatische Komprimierung, Verfasser-Zuordnung | VollstĂ€ndig integriert (Kamera/Galerie, Dual-Foto-Upload, Validierung) | 🟱 Erledigt | +| **BĂŒrgerforum / Ideen** | BĂŒrgerbeteiligung, Beschreibung, bis zu 2 AnhĂ€nge, PDF-Export | VollstĂ€ndig integriert | 🟱 Erledigt | +| **Kontakt & Posteingang** | Kontaktformular mit Validierung, Datenschutzhinweis, Admin-Nachrichten-Posteingang | VollstĂ€ndig integriert (Echtzeit-Inbox, Status-Workflow, Schnellantwort) | 🟱 Erledigt | +| **Benutzerverwaltung** | Rollenverwaltung (Admin/BĂŒrger), Kontoverwaltung in der App ohne Firebase Console | VollstĂ€ndig integriert (In-App User Management, Selbstschutz, Echtzeit) | 🟱 Erledigt | +| **Info & Notruf** | Leitbild BĂŒrgerforum, Gemeinde-Informationen, Notfallnummern mit Schnellwahl | VollstĂ€ndig integriert | 🟱 Erledigt | +| **Authentifizierung & Rechte** | E-Mail/Passwort, BĂŒrger-Freischaltung, Rollenkonzept, Gast-Zugang, Security Rules | VollstĂ€ndig integriert & backend-seitig gehĂ€rtet | 🟱 Erledigt | --- ## đŸ—ïž 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` +- **Framework:** [Flutter](https://flutter.dev) (Dart SDK `>=3.0.0`) +- **Backend & Cloud Services (Google Firebase):** + - `firebase_core` (Initialisierung) + - `firebase_auth` (E-Mail & Passwort Authentifizierung, Gast-Modus) + - `cloud_firestore` (NoSQL Echtzeit-Datenbank) + - `firebase_storage` (Cloud-Bilderspeicher) +- **Externe APIs & Web-Services:** + - WordPress REST-API (`http`-Paket fĂŒr BĂŒrgerforum-Aussendungen) + - `shared_preferences` (Offline-Zwischenspeicherung) +- **Dokumentenverarbeitung & PDF:** + - `pdf`, `printing` (PDF-Generierung, In-App Vorschau & Druck) + - `url_launcher` (System-Browser, Telefon- und E-Mail-Intents) +- **Bildverarbeitung:** + - `image_picker`, `image_cropper`, `cached_network_image`, `image` +- **State Management:** + - `provider` (`MultiProvider` Architektur) ### Projektstruktur (`lib/`): ```text lib/ -├── firebase_options.dart # Firebase-Projektkonfiguration (Android & iOS) -├── main.dart # App-Einstiegspunkt, Firebase Init & MultiProvider +├── firebase_options.dart # Firebase-Konfiguration fĂŒr Android & iOS +├── main.dart # Einstiegspunkt, Theme & MultiProvider Setup ├── models/ -│ └── post_item.dart # Typisiertes Datenmodell fĂŒr News, MĂ€ngel & Ideen +│ └── post_item.dart # Datenmodell fĂŒr News, Aussendungen, 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 +│ ├── add_issue_screen.dart # MĂ€ngelerfassung (Straßen-Dropdown & bis zu 2 Fotos) +│ ├── add_post_screen.dart # Erfassung von News (Admins) & BĂŒrgerideen +│ ├── admin_messages_screen.dart # Admin-Posteingang fĂŒr eingegangene Kontaktanfragen +│ ├── auth_dialog.dart # Anmelde-, Registrierungs- & Freischaltungs-Dialog +│ ├── contact_screen.dart # BĂŒrger-Kontaktformular mit Admin-Posteingang-Banner +│ ├── detail_screen.dart # Beitrags-Detailansicht mit PDF-Direktaufruf +│ ├── home_screen.dart # Haupt-Navigation mit 5 Tabs +│ ├── info_screen.dart # BĂŒrgerforum Leitbild, Notrufnummern & Kontostatus +│ ├── pdf_viewer_screen.dart # In-App PDF-Viewer mit Pinch-to-Zoom & Schwebepanel +│ ├── post_list_screen.dart # News-, MĂ€ngel- & Ideen-Listen mit Volltextsuche & Filter +│ └── user_management_screen.dart# In-App Benutzerverwaltung & Admin-Rollenvergabe └── 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) + ├── aussendungen_service.dart # WordPress REST-API Client mit SharedPreferences-Cache + ├── auth_service.dart # Authentifizierung & automatischer Firestore-Profilabgleich + ├── firestore_service.dart # Firestore CRUD, Admin-Verwaltung & Kontakt-Stream + ├── pdf_service.dart # PDF-Tabellen und Einzeldokument-Erstellung + └── storage_service.dart # Komprimierter Cloud-Storage Bild-Upload ``` --- @@ -89,44 +154,36 @@ lib/ 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. +- **Build-Container:** `ghcr.io/cirruslabs/flutter:3.19.3` mit vorkonfiguriertem Android SDK und Java 17. +- **Automatisierte QualitĂ€tskontrolle:** FĂŒhrt vor jedem Build `flutter analyze` und `flutter test` aus. +- **Erzeugte APK-Pakete:** + 1. `oggauer-gemeindetrommler-universal-release.apk` (Universelle Version fĂŒr alle Android-Smartphones). + 2. `oggauer-gemeindetrommler-arm64-v8a.apk` (Optimiert fĂŒr moderne 64-Bit GerĂ€te). + 3. `oggauer-gemeindetrommler-armeabi-v7a.apk` (FĂŒr Ă€ltere 32-Bit GerĂ€te). + 4. `oggauer-gemeindetrommler-x86_64.apk` (FĂŒr Emulatoren). +- **Download:** Die gebauten APKs stehen nach jedem Durchlauf als ZIP-Artefakt (`oggauer-gemeindetrommler-apks`) im Gitea-Reiter **Aktionen** zum Download bereit. --- -## đŸ› ïž Einrichtung & Lokaler Start +## đŸ› ïž Einrichtung & Lokale AusfĂŒhrung -### 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`) +### Voraussetzungen: +- **Flutter SDK:** `>= 3.19.x` +- **Dart SDK:** Im Flutter SDK enthalten +- **Android Studio / VS Code / Xcode** mit entsprechenden Emulatoren oder TestgerĂ€ten -### Installation & AusfĂŒhrung +### Befehle: ```bash -# 1. AbhĂ€ngigkeiten installieren +# 1. AbhĂ€ngigkeiten laden flutter pub get # 2. Statische Code-Analyse ausfĂŒhren flutter analyze -# 3. Tests ausfĂŒhren +# 3. Unit-Tests ausfĂŒhren flutter test -# 4. App lokal starten +# 4. App im Entwicklungsmodus starten flutter run ```