9 Commits
Author SHA1 Message Date
Dustin 79b15a3cb8 v2.56 — UI/Design-Rework: Melo Dark Fusion (neue Startseite, 2-stufige Einstellungen, Design-System)
- Design-System: MeloDesignTokens ThemeExtension, Outfit-Font, Farben #0B0B10/#14141C/#1C1C26
- Akzentfarbe-User-Einstellung behalten (MeloTheme.akzentNotifier), Gradient aus Akzent
- Startseite: Hero-Weiterhören-Karte mit Cover, Titel, Glow-Play-Button
- 2-stufige Einstellungen: Standard + Expertenmodus (SharedPreferences Key 'experten_modus')
- Komponenten: Pill-Buttons (radius 999), Card-Radius 20, Glow-Shadow, PressScale-Widget
- Login: Gradient-Button mit Akzent-Glow
- 199 Tests grün (194 bestehend + 5 neu): ThemeExtension, Expertenmodus, Akzent, PressScale, Hero
- flutter analyze lib/ + test/ = 0 Issues
- KEIN APK
2026-08-06 19:56:02 +02:00
Dustin 70a79520d0 v2.54.2 — Review-Fixes (Graph): Shuffle-Duplikat bei Einzel-Song+Repeat, Speed-Chip 1.75x, Drag-Race, Speed-Tap-Guard, Version 2026-08-05 21:04:18 +02:00
Dustin 5f7b652eb6 v2.54.1 — Queue zeigt echte Wiedergabe-Reihenfolge (inkl. Shuffle), aktuelles Lied markiert 2026-08-05 12:20:32 +02:00
Dustin 8b6f0925a6 v2.54 — Now-Playing-Redesign im Spotify-Stil
## Now-Playing-Fullscreen
- Kopfzeile: „JETZT LÄUFT"-Header + Like-Button + Queue-Button (Like aus der Titel-Zeile in den Header verschoben)
- Großes Cover zentriert (78 % Breite, Radius 24) mit Glow-Pulsation + Karten-Schatten
- Titel (24, w800) + Künstler (16) linksbündig in klarer Typografie
- Fortschrittsbalken: dickerer Slider (6 px, weiße Blende), Position links / Dauer rechts
- Controls-Reihenfolge wie Spotify: Shuffle, Prev, Play/Pause (74 px), Next, Repeat
- Neue untere Leiste: Schlaf-Timer links, Lyrics-Toggle + Geschwindigkeits-Chip rechts
- Geschwindigkeits-Chip: Tipp wechselt 0.5x–2.0x, wird wie in den Einstellungen persistiert (playback_speed)
- Blur-Hintergrund dezenter (Sigma 45 → 22)
- Versionsstring in main.dart auf 2.54 aktualisiert (Logger)
2026-08-05 12:16:15 +02:00
Dustin bc3357bf72 v2.52.4 — Einstellungen (F4): Auto-Sync-Intervall, Sleep-Timer-Default, Wiedergabegeschwindigkeit, Akzentfarbe, Storage-Info 2026-08-05 11:05:55 +02:00
Dustin 0439ce3ed2 v2.50.4 — Glow-Pulsation rebuildet + Cover-Crossfade beim Songwechsel
## Fix 1 (MED): Glow-Pulsation rebuildet jetzt wirklich
- now_playing_screen.dart: Cover-Container mit AnimatedBuilder(animation: _glowController) gewrappt — BoxShadow (blur 50–70 / spread 6–12) wird jetzt pro Animations-Tick neu gebaut statt nur bei fremden setStates (Pulsation war vorher nur zufällig über positionStream sichtbar und fror bei Pause/Pufferung ein)

## Fix 2 (MED): Echter Crossfade beim Songwechsel
- _songSub-Listener setzt _hatCover/_coverPfad jetzt SYNCHRON auf false/null (im selben setState) — Hintergrund und Front-Cover zeigen beim Songwechsel kein altes Cover mehr, bis die async Existenz-Prüfung durch ist
- _hintergrundBlur-Key auf den tatsächlichen Cover-Pfad gelegt ('cover-$pfad' statt song.id) — Switcher wechselt erst bei geladenem neuem Cover (Crossfade Gradient→Cover), kein Fade alt→alt + harter Cut mehr

flutter analyze: 0 Issues, Tests 98/98 grün, keine neuen Packages
2026-08-04 20:55:24 +02:00
Dustin e584a7d672 v2.50.1 — Player-Glow an Akzent + Pulsation, Cover-Crossfade, existsSync-Fix
## Fullscreen-Player (now_playing_screen.dart)
- Glow-Farbe folgt MeloTheme.akzentNotifier (Per-User-Akzent) statt fixem Rot; Listener rebuildet bei Akzentwechsel
- Dynamische Glow-Pulsation: AnimationController (Bordmittel) pulsiert blurRadius 50–70 / spreadRadius 6–12 nur bei Wiedergabe, stillstehend bei Pause
- Blur-Hintergrund crossfaded beim Songwechsel (AnimatedSwitcher 600ms, layoutBuilder mit StackFit.expand, ValueKey je Song)
- existsSync aus dem Build-Pfad entfernt: async _ladeCoverStatus mit try/catch, Guard gegen stale Song-Wechsel
2026-08-04 20:44:40 +02:00
Dustin bd692d4682 v2.49.4 — Favoriten-Toggle race-sicher (kein PK-Crash bei Doppel-Tap)
## Fix (Code-Review Finding 2, HIGH)
- DbHelper.songZurPlaylist: INSERT OR IGNORE (ConflictAlgorithm.ignore) —
  Doppel-Tap-Race verletzt PRIMARY KEY (playlist_id, song_id) nicht mehr
- FavoritenService.umschalten: gibt neuen Status zurück, try/catch mit
  MeloLogger, Zustand nach Fehler aus DB neu geladen statt blind geflippt
- NowPlayingScreen._toggleFavorit: In-Flight-Guard _toggleLaeuft gegen
  parallele Toggles + Statusübernahme aus DB (Quelle der Wahrheit)
2026-08-04 16:46:49 +02:00
Dustin 19b115b000 v2.49.1 — Now-Playing-Fullscreen (Cover, Controls, Like, Queue, Sleep-Timer)
## NowPlayingScreen (neu: lib/screens/now_playing_screen.dart)
- Blur-Hintergrund aus dem Cover (ImageFiltered + ImageFilter.blur, Bordmittel), Abdunklungs-Verlauf
- Großes Cover: Radius 20, Glow-Effekt (BoxShadow rot), Fallback auf Noten-Icon
- Titel (groß) + Künstler, Like-Button (Herz): togglet Favoriten via FavoritenService (lokal) mit SnackBar
- Fortschritt: Slider mit Seek (Drag-State), Position/Dauer-Text
- Controls: Shuffle, Repeat (3 Zustände), Prev, Play/Pause (roter Kreis), Next (Long-Press = Play-Next-Menü), Play-Next-Button
- Play-Next-Menü: kommende Queue-Songs, Tipp = spieleAlsNaechstes + SnackBar
- Sleep-Timer: Button + Restzeit ⏱ in der Kopfzeile, Sheet mit Chips Aus/15/30/45/60
- Queue-Zugriff: Button in der Kopfzeile → WarteschlangeSheet
- Slide-up/Slide-down via PageRouteBuilder (MiniPlayer)

## MiniPlayer
- Tipp öffnet jetzt den Fullscreen-Player (statt direkt der Queue)
- Queue nur noch via Button im Fullscreen
- Keine neuen Packages, flutter analyze 0 Issues, Tests 35/35
2026-08-04 16:37:13 +02:00