
bvandeusenandClaude Opus 4.7
19061cd10c
feat(flutter): full parity for player bar — shuffle/repeat/volume + Like + kebab + 3-column layout (#356)
Mirrors web's compact PlayerBar both visually (3-column top + full-
width seek bottom) and functionally — closes parity gaps that had
been hidden because the prior mini-bar surfaced none of these
controls.
### audio_handler.dart
- Override `setShuffleMode` → delegates to just_audio's
`setShuffleModeEnabled`.
- Override `setRepeatMode` → maps audio_service modes (none/one/all/
group) to just_audio's LoopMode (off/one/all).
- New `setVolume(double)` + `volumeStream` getter (audio_service's
PlaybackState doesn't carry volume — surface it separately).
- `_broadcastState` now populates PlaybackState's shuffleMode +
repeatMode fields, and re-fires on shuffle/repeat/loop stream
changes so UI subscribers stay in sync.
### player_provider.dart
- New `volumeProvider` (StreamProvider<double>).
- `PlayerActions` gains `toggleShuffle()`, `cycleRepeat()` (none →
all → one → none), and `setVolume(double)`.
### player_bar.dart
Complete rebuild matching the operator-designed layout:
┌──────────┬───────────┬──────────────────┐
│ art │ ♥ ⋮ │ 🔀 🔁 ☰ │ ← short row
│ title │ │ │
│ artist │ ⏮ ⏯ ⏭ │ volume slider │ ← play row, full size
├──────────┴───────────┴──────────────────┤
│ 0:42 ━━━━━●━━━━━━━━━━━━━━━━━━━━━ 3:21 │
└─────────────────────────────────────────┘
- Column 1 (35%): cover + title + artist. Tap → /now-playing.
- Column 2 (intrinsic): like + kebab on top, play controls (40/48/40)
on bottom.
- Column 3 (30%): shuffle/repeat/queue on top, volume slider on bottom.
- Bottom: full-width seek slider with mm:ss labels.
`TrackActionsButton` reused for the kebab; reconstructs a minimal
TrackRef from MediaItem extras (same pattern NowPlayingScreen
already uses).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:59:53 -04:00
..
2026-05-08 22:02:14 -04:00
2026-05-10 18:08:23 -04:00
2026-05-02 17:24:08 -04:00
2026-05-10 18:47:30 -04:00
2026-05-09 16:06:58 -04:00
2026-05-10 13:04:27 -04:00
2026-05-10 11:21:47 -04:00
2026-05-10 18:08:23 -04:00
2026-05-10 23:59:53 -04:00
2026-05-10 18:47:30 -04:00
2026-05-09 13:39:32 -04:00
2026-05-10 18:08:23 -04:00
2026-05-09 16:07:19 -04:00
2026-05-10 18:08:23 -04:00
2026-05-10 19:42:04 -04:00
2026-05-09 16:16:35 -04:00
2026-05-10 20:02:29 -04:00
2026-05-09 23:23:26 -04:00
2026-05-02 17:37:14 -04:00