From 2b033131e0bdbb3aff0fe3a966e486d22af0ed52 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 11 May 2026 08:36:39 -0400 Subject: [PATCH] fix(flutter): mini player heart/kebab span title+artist height MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the like + kebab buttons out of the title row and place them as siblings to the title/artist column. Row's default crossAxisAlignment centers them against the row's full 48dp height (set by the album art), so visually they sit at the vertical center of the title+artist block instead of being pinned to the title baseline. Width stays 32dp each — horizontal footprint matches what we had. Bumped icon size 18→20 since they have more vertical space to occupy. --- flutter_client/lib/player/player_bar.dart | 63 +++++++++++------------ 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/flutter_client/lib/player/player_bar.dart b/flutter_client/lib/player/player_bar.dart index 46457535..e068103e 100644 --- a/flutter_client/lib/player/player_bar.dart +++ b/flutter_client/lib/player/player_bar.dart @@ -89,6 +89,9 @@ class _TrackInfo extends StatelessWidget { final artistName = (media.artist ?? '').trim(); return Row( + // Default centering vertically aligns the like/kebab buttons + // against the album art (48dp) — visually they span the title + + // artist block instead of sitting on the title baseline. crossAxisAlignment: CrossAxisAlignment.center, children: [ if (media.artUri != null) @@ -115,39 +118,11 @@ class _TrackInfo extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ - // Title row: title text + inline like + kebab. The - // like/kebab buttons get their default 48dp tap target - // shrunk to 32dp so the title has room. - Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Text( - media.title, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(color: fs.parchment, fontSize: 14), - ), - ), - SizedBox( - width: 32, - height: 32, - child: LikeButton( - kind: LikeKind.track, - id: media.id, - size: 18, - ), - ), - SizedBox( - width: 32, - height: 32, - child: TrackActionsButton( - track: _trackRefFromMediaItem(media), - hideQueueActions: true, - ), - ), - ], + Text( + media.title, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: fs.parchment, fontSize: 14), ), if (artistName.isNotEmpty) Text( @@ -159,6 +134,28 @@ class _TrackInfo extends StatelessWidget { ], ), ), + // Like + kebab as siblings to the title/artist column rather + // than nested inside the title row. Width stays 32dp each so + // horizontal footprint matches what we had; height stretches + // to the row's full 48dp so the icons sit at vertical center + // against the title+artist block. + SizedBox( + width: 32, + height: 48, + child: LikeButton( + kind: LikeKind.track, + id: media.id, + size: 20, + ), + ), + SizedBox( + width: 32, + height: 48, + child: TrackActionsButton( + track: _trackRefFromMediaItem(media), + hideQueueActions: true, + ), + ), ], ); }