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), + ); + }); }