fix(discover): restore hero indicators and bottom fade on non-TV

The hero dots/pause row was gated on live input mode, so any navigation
key event (Android back key, BT keyboards, gamepad-source noise) hid it
until the next pointer event - on phones it ended up permanently hidden.
Gate on the TV platform instead (issue #600's actual scope); the TV
layout never renders the carousel, so nothing changes there.

The bottom fade lost its guaranteed opaque band when the section-level
gradient was removed (686a61ac): the per-item overlay only reached full
background at the literal last pixel, letting artwork ghost through the
final 15% and read as a hard cut against the content below - worst on
phones, where square hero art is bright at the bottom. Finish the fade
at solid background from the 0.94 stop (~32px band on a phone hero).
This commit is contained in:
edde746
2026-07-04 23:18:33 +02:00
parent d9b365b012
commit c8ca8a7875
2 changed files with 156 additions and 6 deletions
+10 -4
View File
@@ -1373,8 +1373,11 @@ class _DiscoverScreenState extends State<DiscoverScreen>
return _buildHeroItem(_onDeck[index], heroHeight);
},
),
// Page indicators with animated progress and pause/play button
if (!InputModeTracker.isKeyboardMode(context))
// Page indicators with animated progress and pause/play button.
// Hidden on TV only (issue #600: pointer-only control unreachable
// via d-pad) — never gated on transient input mode, which back-key
// events, BT keyboards, and gamepads can flip on phones/desktop.
if (!isTv)
Positioned(
bottom: 16,
left: -26,
@@ -1586,8 +1589,11 @@ class _DiscoverScreenState extends State<DiscoverScreen>
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.transparent, bgColor.withValues(alpha: 0.9), bgColor],
stops: isTv ? const [0.25, 0.78, 1.0] : const [0.5, 0.85, 1.0],
// Reach full bg before the bottom edge so the hero
// blends seamlessly into the content below and the
// page dots sit on a solid band.
colors: [Colors.transparent, bgColor.withValues(alpha: 0.9), bgColor, bgColor],
stops: isTv ? const [0.25, 0.78, 0.94, 1.0] : const [0.5, 0.85, 0.94, 1.0],
),
),
);