From ea4bd2197772d89b73a5a4f28b50d7f99889e1c9 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:40:59 +0200 Subject: [PATCH] fix(tv): refresh retained spotlight metadata --- lib/widgets/tv_spotlight_scaffold.dart | 2 +- test/widgets/tv_spotlight_scaffold_test.dart | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/widgets/tv_spotlight_scaffold.dart b/lib/widgets/tv_spotlight_scaffold.dart index 8af46ab6..80b775ad 100644 --- a/lib/widgets/tv_spotlight_scaffold.dart +++ b/lib/widgets/tv_spotlight_scaffold.dart @@ -41,7 +41,7 @@ class TvSpotlightController extends ValueNotifier { fallback ??= hub.items.first; if (current == null) continue; for (final item in hub.items) { - if (item.globalKey == current.globalKey) return current; + if (item.globalKey == current.globalKey) return item; } } return fallback; diff --git a/test/widgets/tv_spotlight_scaffold_test.dart b/test/widgets/tv_spotlight_scaffold_test.dart index 4927bed6..36e5fffd 100644 --- a/test/widgets/tv_spotlight_scaffold_test.dart +++ b/test/widgets/tv_spotlight_scaffold_test.dart @@ -43,4 +43,19 @@ void main() { controller.value = _item('removed'); expect(controller.resolve(hubs), same(first)); }); + + test('spotlight controller resolves the latest item instance for a retained selection', () { + final stale = _item('same'); + final refreshed = testMediaItem(id: 'same', backend: MediaBackend.plex, kind: MediaKind.movie, title: 'Updated'); + final controller = TvSpotlightController(settleDelay: Duration.zero); + addTearDown(controller.dispose); + controller.value = stale; + + expect( + controller.resolve([ + _hub('one', [refreshed]), + ]), + same(refreshed), + ); + }); }