diff --git a/flutter_client/lib/library/artist_detail_screen.dart b/flutter_client/lib/library/artist_detail_screen.dart index 784776f1..3f624418 100644 --- a/flutter_client/lib/library/artist_detail_screen.dart +++ b/flutter_client/lib/library/artist_detail_screen.dart @@ -141,10 +141,11 @@ class ArtistDetailScreen extends ConsumerWidget { (constraints.maxWidth - sidePad * 2 - gap * (cols - 1)) / cols; // Card content: cover (cellW - 16) + 8 + title (≤2 lines - // ≈ 36) + small fudge. Artist line is suppressed in this + // ≈ 36) + slack. Artist line is suppressed in this // grid (showArtist: false) since the page header already - // names the artist. - final cellH = (cellW - 16) + 8 + 36 + 4; + // names the artist. Slack is generous on purpose — line- + // height variations would otherwise overflow by 1px. + final cellH = (cellW - 16) + 8 + 36 + 8; return GridView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), diff --git a/flutter_client/lib/library/library_screen.dart b/flutter_client/lib/library/library_screen.dart index 80b4a762..b3e85380 100644 --- a/flutter_client/lib/library/library_screen.dart +++ b/flutter_client/lib/library/library_screen.dart @@ -288,8 +288,11 @@ class _AlbumsTab extends ConsumerWidget { gap * (cols - 1)) / cols; // cover (cellW - 16) + gap (8) + 2-line title (~36) - // + artist line (~16) + small fudge. - final cellH = (cellW - 16) + 8 + 36 + 16 + 4; + // + artist line (~16) + slack. Slack is generous on + // purpose — line-height + font scaling variations + // would otherwise overflow the cell by a pixel + // (logged as a noisy RenderFlex warning). + final cellH = (cellW - 16) + 8 + 36 + 16 + 8; return NotificationListener( onNotification: (n) { if (n.metrics.pixels >=