feat(music): music browsing UI — square cards, library groupings, artist/album screens

Un-gates music libraries; adds CardShape.square plumbing (circular
artists), artists/albums/tracks browse groupings with per-grouping
sorts, audio playlists tab, artist + album detail screens with dpad
track rows, music context-menu actions, and a stub MusicPlaybackService
seam for the upcoming engine.
This commit is contained in:
edde746
2026-07-05 17:20:28 +02:00
parent fff559da06
commit 05a631415e
30 changed files with 2235 additions and 67 deletions
+7
View File
@@ -492,6 +492,11 @@ class HubSectionState extends State<HubSection> with MountedSetStateMixin, Skele
final useWideLayout =
episodePosterMode == EpisodePosterMode.episodeThumbnail && (isEpisodeOnlyHub || isMixedHub);
// Music hubs render square album/artist artwork
final isSquareHub =
widget.hub.items.isNotEmpty &&
widget.hub.items.every((item) => item.cardShape(episodePosterMode) == CardShape.square);
// Card dimensions based on hub type
const wideCardMultiplier = 1.5;
final cardWidth = useWideLayout ? baseCardWidth * wideCardMultiplier : baseCardWidth;
@@ -499,6 +504,8 @@ class HubSectionState extends State<HubSection> with MountedSetStateMixin, Skele
final posterHeight = useWideLayout
? posterWidth *
(9 / 16) // 16:9 for wide layout
: isSquareHub
? posterWidth // 1:1 for music artwork
: posterWidth * 1.5; // 2:3 for poster layout
final containerHeight = posterHeight + (isTv ? 48 : 33);