Mapsy

Social Location Sharing App - Verbinde dich mit Freunden durch Standorte, Fotos und Echtzeit-Messaging

View on GitHub
👥 Artur Sidorenko & Mika Königsmann

Projektübersicht

Mapsy ist eine umfassende Social-Media-Anwendung, die Standortfreigabe mit Social-Networking-Funktionen kombiniert. Benutzer können ihre Standorte, Fotos, Statusaktualisierungen teilen und über Echtzeit-Messaging kommunizieren, während sie über eine interaktive Kartenoberfläche mit Freunden verbunden bleiben.

22
Bildschirme
12+
Tech Features
40+
Packages
2
Sprachen

Kernfunktionen

Entdecke die leistungsstarken Features, die Mapsy zu einer umfassenden Social Location Sharing Plattform machen

🗺️

Kartenbasiertes Social Network

Interaktive Echtzeit-Karte zeigt Freundes-Standorte und geteilte Fotos. Entdecke Inhalte basierend auf geografischer Nähe und erkunde, was in deiner Umgebung passiert.

📍 Echtzeit-Updates 🎯 Geo-basierte Entdeckung 🗺️ Mapbox Integration
💬

Echtzeit-Messaging

Direktnachrichten und Gruppenchats mit erweiterten Features wie Reaktionen, Nachrichtenbearbeitung, Threading und nahtloser Standortfreigabe innerhalb von Chats.

⚡ Firestore Streams 😊 Reaktionen ✏️ Bearbeitung 💬 Gruppenchats
📍

Live Standortfreigabe

Teile deinen aktuellen Standort punktuell oder aktiviere Live-Updates für konfigurierbare Zeiträume. Perfekt für Treffen, Events oder um Freunden deine Route zu zeigen.

⏱️ 1h / 3h / 9h 🔄 Auto-Ablauf 🔋 Hintergrund-Tracking
📸

Foto-Sharing

Standort-getaggte Fotos mit Likes, Kommentaren und 24-Stunden-Ablauf für ephemere Inhalte. Vollständige Integration von Kamera und Galerie für nahtloses Teilen.

📷 Kamera-Integration ❤️ Likes & Kommentare ⏰ 24h Stories
🎉

Event-Management

Erstelle standortbasierte Events mit intelligenten Einladungen, RSVP-System und automatischer Gruppen-Chat-Erstellung für alle Teilnehmer.

📅 Kalender-Integration ✉️ Einladungen ✅ RSVP-Tracking
👥

Freundessystem

Verwalte deine Kontakte mit Freundschaftsanfragen, markiere beste Freunde für priorisierten Zugriff, nutze QR-Code-Sharing und Kontaktintegration.

🔍 Nutzersuche ⭐ Best Friends 📱 QR-Codes 📇 Kontakte-Sync
🔔

Smart Notifications

Firebase Cloud Messaging für Echtzeit Push-Benachrichtigungen kombiniert mit lokalen Notifications für Event-Erinnerungen und wichtige Updates.

🔔 Push (FCM) 📬 Lokal 🎨 Rich Media
🌍

Mehrsprachigkeit

Vollständige Unterstützung für Deutsch und Englisch mit über 300 professionell übersetzten Strings. Dynamischer Sprachwechsel ohne App-Neustart.

🇩🇪 Deutsch 🇬🇧 English 🔄 Live-Switch

Technologie-Stack

💡
Hovere mit deinem Mauszeiger auf ein Package, worüber du mehr Informationen erhalten willst.
📱
Framework & Core
5 Technologies
Flutter Dart Riverpod Provider RxDart
🔥
Backend & Database
5 Technologies
Firebase Cloud Firestore Firebase Auth Firebase Storage Cloud Messaging
🗺️
Maps & Location
6 Technologies
Mapbox Google Maps flutter_map Geolocator Geocoding latlong2
📸
Media & Camera
5 Technologies
Camera Image Picker Photo View Image Cached Network Image
🎨
UI & Animation
5 Technologies
Flutter Animate Shimmer Lottie Page Route Animator Table Calendar
🔧
Utilities
6 Technologies
QR Flutter Mobile Scanner flutter_contacts Share Plus URL Launcher Timeago
💾
Storage & Persistence
3 Technologies
SharedPreferences Path Provider SQLite
🌐
Localization
2 Technologies
flutter_localizations Intl

Architektur & Design Patterns

Moderne Software-Architektur mit bewährten Design Patterns für wartbaren und skalierbaren Code

🏗️

Repository Pattern

FirestoreService fungiert als einzige Quelle der Wahrheit für alle Datenoperationen

Zentralisierte Daten Testbar Wartbar
🔄

Provider Pattern

Riverpod Provider verwalten den App-weiten State effizient und reaktiv

State Management Reaktiv Typ-sicher
📡

Stream-basierte Architektur

Echtzeit-Updates über Firestore Streams für synchrone Daten

Echtzeit Automatisch Effizient
⚙️

Service Layer

Klare Trennung der Geschäftslogik von der UI-Schicht

Separation of Concerns Wiederverwendbar Clean Code

📁 Projektstruktur

Organisiert nach Clean Architecture Prinzipien mit klarer Trennung der Verantwortlichkeiten

📁 lib/
📂 models/ Datenmodelle (User, Message, Chat, Event, etc.)
📂 providers/ Riverpod State Provider
📂 screens/ UI-Bildschirme und Views
📁 auth/ login, signup, forgot_password, splash
📁 chat/ chat, conversations, location_view
📁 events/ create, attendees, detail, list
📁 friends/ friends, contact_sync, qr_scanner, qr_display
📁 group/ add_participants, create_info, select_friends, group_info
📁 map/ map, camera, cluster_gallery
📁 profile/ profile, profile_edit
📁 photos/ photo_detail, photo_preview
📁 settings/ settings, about, blocked_users, change_password, delete_account, notification, language
📂 services/ firestore, location, live_location, notification, notification_trigger
📂 widgets/ Wiederverwendbare UI-Komponenten
📂 utils/ Hilfsfunktionen und Extensions
📂 l10n/ Lokalisierungsdateien (i18n)

🏗️ Architektur-Diagramme

Detaillierte PlantUML-Diagramme dokumentieren die Systemarchitektur, Komponenten-Beziehungen und Datenflüsse

🔷 Layered Architecture

Detaillierte Darstellung der geschichteten Architektur mit Stream Providers, State Providers und Future Providers.

📥 Download

🔷 Component Diagram

Zeigt die Beziehungen zwischen Services, Providers und externen APIs wie Firebase und Mapbox.

📥 Download

🔷 Sequence Diagram

Sequenzdiagramm für Live Location Sharing mit Echtzeit-GPS-Tracking, automatischem Ablauf und Benachrichtigungen.

📥 Download

🔷 Class Diagram

Vollständiges Klassendiagramm mit allen Domain Models, Value Objects und deren Beziehungen.

📥 Download

🔷 Full Architecture

Komplettes Architekturdiagramm mit allen Komponenten, Services und externen Abhängigkeiten.

📥 Download

Implementierte Technische Funktionen

1 GPS / Ortungsdienste
2 Kamera & Fotos
3 Backend (Firebase)
4 API Integration
5 Authentifizierung
6 Push-Benachrichtigungen
7 Lokale Benachrichtigungen
8 Persistenz
9 Mehrsprachigkeit
10 Animationen
11 Theme System
12 App Design

GPS / Ortungsdienste

lib/services/location_service.dart, lib/services/live_location_service.dart

📍 Wo verwendet:

  • Kartenbildschirm: Anzeige des aktuellen Standorts und Freunde-Standorte
  • Fotoaufnahme: Automatisches Taggen von Fotos mit Standortkoordinaten
  • Event-Erstellung: Event-Standort über GPS festlegen
  • Standortfreigabe im Chat: Aktuellen und Live-Standort teilen (1h, 3h, 9h Dauer)
  • Standort-Nachrichten-Widget: Standortvorschauen im Chat anzeigen

⚡ Funktionen:

  • GPS-Positionsverfolgung
  • Echtzeit-Standort-Updates
  • Standortberechtigungs-Handling
  • Hintergrund-Standortverfolgung für Live-Sharing
  • Automatischer Ablauf von Live-Standortfreigaben

📁 Wichtige Dateien:

lib/services/location_service.dart lib/services/live_location_service.dart lib/screens/chat/chat_screen.dart lib/widgets/location_message_widget.dart

Kamera & Fotos

image_picker Package-Integration

📍 Wo verwendet:

  • Foto-Posts: Neue Fotos aufnehmen oder aus Galerie auswählen
  • Profil-Avatar: Profilbilder hochladen
  • Event-Bilder: Bilder zu Events hinzufügen
  • Gruppensymbole: Benutzerdefinierte Gruppenchat-Symbole festlegen

⚡ Funktionen:

  • Kamerazugriff für Live-Fotoaufnahmen
  • Galeriezugriff für vorhandene Fotos
  • Bildkomprimierung und -optimierung
  • Firebase Storage-Integration für Bild-Hosting
  • Foto-Metadaten (Standort, Zeitstempel)
  • Foto-Ablauf (24 Stunden)

📁 Wichtige Dateien:

lib/screens/map/camera_screen.dart lib/services/firestore_service.dart lib/screens/photos/photo_detail_screen.dart

Backend (Firebase)

Firebase Firestore mit benutzerdefiniertem Service-Layer

🏗️ Architektur:

  • Service Layer: FirestoreService zentralisiert alle Backend-Operationen
  • Collections: users, chats, messages, photos, statuses, events, friendRequests, liveLocations, notifications

⚡ Funktionen:

  • Echtzeit-Datensynchronisation über Firestore Streams
  • Optimistische Updates für bessere UX
  • Offline-Unterstützung mit Firestore-Caching
  • Sicherheitsregeln für Datenschutz
  • Batch-Operationen für Effizienz
  • Transaktionsunterstützung für atomare Operationen

📁 Wichtige Dateien:

lib/services/firestore_service.dart firestore.rules lib/models/*

API Integration

Firebase APIs & Mapbox API

🔥 Firebase APIs:

  • Firebase Authentication: Benutzerauthentifizierung und Session-Management
  • Cloud Firestore: Echtzeit-Datenbank
  • Firebase Storage: Datei- und Bildspeicher
  • Firebase Cloud Messaging (FCM): Push-Benachrichtigungen

🗺️ Mapbox API:

  • Karten-Rendering und -Anzeige
  • Karten-Tiles und Styles
  • Marker-Verwaltung
  • Geocoding (Koordinaten zu Adressen)

📁 Wichtige Dateien:

lib/main.dart lib/screens/map/map_screen.dart lib/services/notification_service.dart

Authentifizierung

Firebase Authentication

⚡ Funktionen:

  • E-Mail/Passwort-Authentifizierung
  • Sichere Session-Verwaltung
  • Passwort-Validierung
  • E-Mail-Verifizierungs-Unterstützung
  • Kontoerstellungs-Flow
  • Abmeldefunktion
  • Authentifizierungsstatus-Persistenz

🔒 Sicherheit:

  • Firestore-Sicherheitsregeln erzwingen Authentifizierung
  • Token-basierte Authentifizierung
  • Sichere Passwort-Hashing (Firebase-verwaltet)

📁 Wichtige Dateien:

lib/screens/auth/login_screen.dart lib/screens/auth/register_screen.dart lib/providers/app_providers.dart

Push-Benachrichtigungen

Firebase Cloud Messaging (FCM)

📍 Wo verwendet:

  • Neue Nachrichtenbenachrichtigungen (DM und Gruppenchats)
  • Freundschaftsanfrage-Benachrichtigungen
  • Event-Einladungs-Benachrichtigungen
  • Foto-Like/Kommentar-Benachrichtigungen
  • Statusaktualisierungen von Freunden

⚡ Funktionen:

  • Vordergrund-Benachrichtigungen
  • Hintergrund-Benachrichtigungen
  • Benachrichtigungs-Tap-Navigation
  • Benutzerdefinierte Benachrichtigungs-Payload
  • Benachrichtigungskanäle (Android)
  • Badge-Counts
  • Rich-Benachrichtigungen mit Bildern

📁 Wichtige Dateien:

lib/services/notification_service.dart lib/services/notification_trigger_service.dart lib/screens/settings/notification_settings_screen.dart

Lokale Benachrichtigungen

flutter_local_notifications Package

📍 Wo verwendet:

  • Event-Erinnerungen (1 Stunde vor Event)
  • Standortfreigabe-Ablaufwarnungen
  • Offline-Nachrichten-Warteschlangen-Alerts
  • App-Update-Benachrichtigungen

⚡ Funktionen:

  • Geplante Benachrichtigungen
  • Benachrichtigungsaktionen
  • Benutzerdefinierte Benachrichtigungssymbole
  • Benachrichtigungskanäle
  • Wichtigkeitsstufen
  • Benachrichtigungsverlauf

📁 Wichtige Dateien:

lib/services/notification_service.dart

Persistenz

SharedPreferences + Firestore Offline-Cache

💾 Was wird lokal gespeichert:

  • Benutzer-Authentifizierungs-Token
  • Benutzerpräferenzen (Benachrichtigungen, Sprache)
  • Theme-Präferenz (Hell-/Dunkelmodus)
  • Letzter bekannter Standort
  • Cache aktueller Chats
  • Offline-Nachrichten-Warteschlange
  • App-Einstellungen

⚡ Funktionen:

  • Schlüssel-Wert-Speicher für Präferenzen
  • Firestore-Offline-Persistenz
  • Automatische Cache-Verwaltung
  • Datenmigrationsunterstützung

📁 Wichtige Dateien:

lib/providers/app_providers.dart lib/services/notification_service.dart lib/main.dart

Mehrsprachigkeit

Flutter i18n mit ARB-Dateien

🌍 Unterstützte Sprachen:

  • Englisch (en)
  • Deutsch (de)

⚡ Funktionen:

  • 300+ übersetzte Strings
  • Dynamischer Sprachwechsel
  • Persistente Sprachpräferenz
  • Right-to-left (RTL) Unterstützung bereit
  • Parametrisierte Übersetzungen (Plural, Geschlecht, etc.)
  • Datum/Uhrzeit-Lokalisierung

📝 Übersetzungs-Abdeckung:

  • Alle UI-Labels und Buttons
  • Fehlermeldungen
  • System-Nachrichten
  • Benachrichtigungstext
  • Dialog-Inhalte
  • Formular-Platzhalter

📁 Wichtige Dateien:

lib/l10n/app_en.arb lib/l10n/app_de.arb lib/utils/app_localizations_extension.dart lib/screens/settings/language_settings_screen.dart l10n.yaml

Animationen

Flutter-Animationen in der gesamten App

🎬 Verwendete Animationstypen:

  • Seitenübergänge: Skalierungs-, Slide-, Fade-Übergänge
  • Widget-Animationen: Lade-Spinner, Fortschritts-Indikatoren, Button-Druck-Animationen
  • Karten-Animationen: Marker-Animationen, Zoom-Animationen, Kamera-Bewegungen
  • Listen-Animationen: Scroll-Animationen, Element-Erscheinungs-Animationen
  • Status-Updates: Pulsierender Live-Standort-Indikator, Reaktions-Animationen

📁 Wichtige Dateien:

lib/utils/page_transitions.dart

Theme System

Flutter ThemeData mit dynamischem Wechsel

⚡ Funktionen:

  • Helles Theme
  • Dunkles Theme
  • System-Theme-Following (Standard)
  • Persistente Theme-Präferenz
  • Theme-bewusste Widgets durchgehend
  • Benutzerdefinierte Farbschemata
  • Material Design 3 Theming

🎨 Theme-Farben:

  • Primär: Blau
  • Sekundär: Türkis
  • Fehler: Rot
  • Erfolg: Grün
  • Warnung: Orange

📁 Wichtige Dateien:

lib/main.dart

App Design

Benutzerdefiniertes App-Branding

📱 App-Icon:

  • Benutzerdefiniertes Mapsy-Logo
  • Android adaptives Icon
  • iOS Icon-Set
  • Mehrere Auflösungen

🎨 Splash Screen:

  • Gebrandeter Ladebildschirm
  • Mapsy-Logo
  • App-Name
  • Lade-Indikator
  • Gradient-Hintergrund

📁 Dateien:

android/app/src/main/res/ ios/Runner/Assets.xcassets/

🔥 Firebase-Zugriffe

Die Kommunikation mit Firebase erfolgt über drei Hauptdienste:

1. Firestore Database

• Zugriff über FirestoreService (lib/services/firestore_service.dart)
• Lese-Operationen: FirebaseFirestore.instance.collection('collectionName').doc('docId').get()
• Stream-basierte Echtzeit-Updates: collection('collectionName').snapshots()
• Schreib-Operationen: doc('docId').set(data) oder update(data)

Stream<List<Message>> getMessages(String chatId) { return _firestore .collection('chats') .doc(chatId) .collection('messages') .orderBy('timestamp', descending: true) .snapshots() .map((snapshot) => snapshot.docs.map((doc) => Message.fromMap(doc.data()) ).toList() ); }

2. Firebase Storage

• Zugriff über FirebaseStorage.instance
• Bilder hochladen: ref().child('path').putFile(file)
• Download-URLs abrufen: ref().child('path').getDownloadURL()

final ref = FirebaseStorage.instance .ref() .child('users/\$userId/avatar.jpg'); await ref.putFile(imageFile); final downloadUrl = await ref.getDownloadURL();

3. Firebase Cloud Messaging (FCM)

• Push-Benachrichtigungen für Nachrichten, Freundschaftsanfragen und Events
• Token-Verwaltung für Geräteregistrierung
• Background und Foreground Message Handling

100%