Gestaffelte Enter-Animation für Songlisten (EinblendItem)
Items in song_list.dart und artist_list.dart faden/rutschen beim ersten Erscheinen gestaffelt statt abrupt ein — angelehnt an HyperOS' fließende Motion-Sprache. Läuft einmal pro Element, respektiert Reduce-Motion und deckelt die Verzögerung ab Index 12.
This commit is contained in:
@@ -5,6 +5,34 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### ✨ Staggered List-Enter-Animation: Listen faden beim ersten Erscheinen gestaffelt ein (2026-08-29)
|
||||
|
||||
- ✅ **Teil 1 einer Animations-Serie** (inspiriert von Xiaomis HyperOS-
|
||||
Design-Sprache — fließende statt abrupte Bewegung): neues Widget
|
||||
`EinblendItem` (`lib/shared/einblend_item.dart`) blendet ein Listenelement
|
||||
beim ersten Erscheinen mit Opacity 0→1 und leichtem Versatz (`MeloSpace.sm`
|
||||
→ 0) ein, Dauer `MeloMotion.normal` (220ms), Kurve `MeloMotion.curve`.
|
||||
Jedes Element startet um `min(index, 12) × 25ms` versetzt — ab Index 12
|
||||
ohne zusätzliche Verzögerung, damit lange Listen nicht träge wirken. Läuft
|
||||
genau einmal je Element-Lebenszeit (nicht bei jedem Rebuild) und
|
||||
respektiert Reduce-Motion (`MeloMotion.ruhig`): dann erscheint das Element
|
||||
sofort im Endzustand, ohne Verzögerung oder Bewegung.
|
||||
- 🔧 Eingebunden in `SongList` (`lib/library/song_list.dart`) und in beide
|
||||
Listen von `artist_list.dart` (Künstler-Übersicht sowie die Zeilen der
|
||||
Künstler-Detailseite — Alben, Titel und Zwischenüberschriften). Die
|
||||
wiederverwendete `SongZeile` selbst bleibt unverändert, damit Suche und
|
||||
Playlist-Detail (die den Wrapper nicht bekommen sollen) unangetastet
|
||||
bleiben. `my_music_screen.dart` rendert keine eigene Liste (nur
|
||||
eingebettete `SortableSongList`/`ArtistListScreen`/`CategoryListScreen`)
|
||||
— dort war nichts einzubinden.
|
||||
- ✅ **Getestet (RED→GREEN):** neuer Widget-Test
|
||||
`test/shared/einblend_item_test.dart` prüft Start bei Opacity 0, Ziel bei
|
||||
1,0 nach `pumpAndSettle()`, sofortigen Endzustand bei
|
||||
`disableAnimations: true` sowie den Deckel bei Index 12 (Index 50 startet
|
||||
nicht später als Index 12). Bestehende Tests zu `song_list.dart` liefen
|
||||
bereits mit `pumpAndSettle()` und blieben unverändert grün. Volle Suite
|
||||
(604 Tests) grün, `flutter analyze` ohne Befund.
|
||||
|
||||
### 🔑 Manuelle Baka-Anmeldung übernahm das neue Passwort nie dauerhaft; Auto-Login-Fehler wurde verworfen (2026-08-29)
|
||||
|
||||
- 🐛 **Wer sich nach einer fehlgeschlagenen Auto-Anmeldung manuell im
|
||||
|
||||
Reference in New Issue
Block a user