5.6 KiB
5.6 KiB
Melo 1.0 – Code-Audit & Design-Review
Datum: 26.07.2026
Repo: /home/dustin/git/melo_app/ (27 Dart-Dateien, v2.7 laut Logger)
🔴 TOTE BUTTONS (führen zu nichts oder zum falschen Ziel)
1. BottomNavigationBar – 3 von 5 Tabs defekt!
Datei: lib/screens/home_screen.dart Zeile 367–371
| Tab | Label | Was passiert | Sollte passieren |
|---|---|---|---|
| 🎵 Musik | Index 0 | ✅ Home-Screen | ✅ richtig |
| ⬇ Downloads | Index 1 | ✅ DownloadScreen | ✅ richtig |
| 🏷️ Tags | Index 2 | ❌ öffnet PlaylistSheet! | Sollte nach Tags filtern o. Tag-Manager zeigen |
| ❤️ Favoriten | Index 3 | ❌ öffnet PlaylistSheet! | Sollte favorisierte Songs filtern |
| ⚙️ Einstellungen | Index 4 | ❌ KEIN Handler – tut gar nichts! | Sollte Einstellungen-Seite zeigen |
// Aktueller Code (defekt):
onTap: (i) {
setState(() => _aktiverTab = i);
if (i == 2) _zeigePlaylistSheet(); // FALSCH: Tags → Playlists
if (i == 3) _zeigePlaylistSheet(); // FALSCH: Favoriten → Playlists
// i == 4 → KEIN Code! Einstellungen-Tab tot.
},
2. Auskommentierte Widgets (Features existieren, sind aber deaktiviert)
Datei: lib/screens/home_screen.dart Zeile 272–291
-
RecentWidget (Zeile 273):
// RecentWidget(songs: _vm.letzteSongs, onPlay: _vm.spieleSong),- Zeigt "Zuletzt gehört" – Code existiert in
lib/widgets/recent_widget.dart, korrekt implementiert
- Zeigt "Zuletzt gehört" – Code existiert in
-
TagStatsWidget (Zeile 290):
// TagStatsWidget(tagCounts: _vm.tagCounts),- Zeigt Tag-Häufigkeiten farbcodiert – Code existiert in
lib/widgets/tag_stats_widget.dart, korrekt implementiert
- Zeigt Tag-Häufigkeiten farbcodiert – Code existiert in
3. Alle anderen Buttons ✅ intakt
- MeloHeader (Cloud/Suche/Download): alle 3 funktional
- SongTile (Edit/Favorit/Playlist/Play): alle funktional
- MiniPlayer (Play/Pause/Skip): alle funktional
- DownloadScreen (Ordner/Download/Abbrechen): alle funktional
- PlaylistSheet (Neu/Öffnen/Löschen): alle funktional
- NavidromeBrowser (Verbinden/Alben/Stream/Download): alle funktional
🎨 DESIGN-ANALYSE & VERSCHÖNERUNGSVORSCHLÄGE
Aktuelles Design (Bestandsaufnahme)
- Farbschema: Dark Theme – Schwarz
#0D0D0D, Dunkelgrau#1A1A1A/#2A2A2A, Rot#CC0000als Akzent - Typografie: System-Standardschrift, keine Custom-Font. Nur Größen-Variation (9-28px).
- Layout: Standard-Material mit BottomNavigationBar, ListView, Cards
- Rundungen: Konsistent 8-14px Border-Radius
- Icons: Material Icons, teils mit Emoji (♪, 💿, 🎵, 💌)
- Animationen: Nur implizit (FAB, BottomSheet); keine expliziten
🔥 Top 10 Verschönerungs-Maßnahmen (priorisiert)
1. Custom-Schriftart – Höchste Wirkung, geringer Aufwand
- Schriftart wie Inter oder Poppins via
google_fontseinbinden - Sofort moderneres, hochwertigeres Look & Feel
pubspec.yaml→google_fonts: ^6.1.0
2. Glassmorphism-Effekte
- MiniPlayer + StatistikCard mit
BackdropFilter+blur - Transparenter, schwebender Look statt flache Container
ClipRRectmitBackdropFilter(brightness: 0.2, saturation: 0.3)
3. Subtiler Hintergrund-Gradient
- Statt
MeloTheme.schwarzein radialer Gradient von#1A0505nach#0D0D0D - Gibt Tiefe, wirkt weniger "flach"
4. Song-Tiles mit Swipe-Gesten
- Swipe links → Favorit toggeln
- Swipe rechts → Zur Playlist hinzufügen
flutter_slidablePackage
5. Skeleton-Loader / Shimmer
- Statt
CircularProgressIndicatorbeim Laden - Placeholder-Karten mit
shimmer-Animation - Wirkt professioneller, weniger "Lade-Unterbrechung"
6. Hero-Animationen
- MiniPlayer → Vollbild-Player mit fließendem Übergang
- Album-Cover als Hero-Widget
7. Leere-Zustände mit Icons/Illustration
- "Noch keine Playlists" → mit großer Illustration + CTA-Button
- "Keine Treffer" → Such-Illustration
- Statt reinem Text
8. Animierte Tab-Indikatoren
- BottomNavBar mit animiertem Indikator-Balken oder Dot
- Sanfte Farbverläufe beim Wechseln
9. Pull-to-Refresh auf Song-Liste
RefreshIndicatorum die ListView- Neu-Scannen per Wischgeste
10. Farbcodierte Fortschrittsbalken
- Fortschritt farblich codieren (grau→gelb→grün bei Download-Fortschritt)
- Statt einfachem roten Balken
Farbpaletten-Erweiterung (Vorschlag)
// Zusätzlich zu bestehenden Farben:
static const Color rotGlow = Color(0x40CC0000); // für Glow-Effekte
static const Color surfaceHell = Color(0xFF252525); // für Hover/Active
static const Color erfolg = Color(0xFF4CAF50); // Grün-Akzent
static const Color warnung = Color(0xFFFFC107); // Gelb-Akzent
Auch interessant (niedrigere Priorität)
- Waveform-Animation im MiniPlayer (statt statischem Balken)
- Konfetti-Effekt nach erfolgreichem Download
- Haptisches Feedback bei Button-Taps (
HapticFeedback.lightImpact()) - Dark-Mode-Only mit OLED-optimiertem
#000000für echte Schwarztöne - BottomSheet mit Drag-Handle schon vorhanden → schön!
📊 Zusammenfassung
| Kategorie | Befund |
|---|---|
| Tote Buttons | 3 von 5 Tabs defekt – Tags/Favoriten öffnen Playlists, Einstellungen tut nichts |
| Deaktivierte Widgets | RecentWidget + TagStatsWidget auskommentiert, Code intakt |
| Sonstige Buttons | Alle intakt ✅ |
| Design-Level | Solide Basis, Material 3 Dark Theme, konsistent |
| Größtes Manko | Keine Custom-Schriftart, flache Container, keine Animationen |
| Schnellster Gewinn | Custom Font + Glassmorphism + Gradient-Hintergrund |