From cb7de47aed42067163e68c7f15c754ade1072db4 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Tue, 3 Mar 2026 20:45:38 +0100 Subject: [PATCH] fix: guard ScrollController.position access in HorizontalScrollWithArrows Prevents "Too many elements" StateError on Android TV when the controller temporarily has multiple positions during widget rebuilds. --- lib/widgets/horizontal_scroll_with_arrows.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/widgets/horizontal_scroll_with_arrows.dart b/lib/widgets/horizontal_scroll_with_arrows.dart index af79368c..9da1365f 100644 --- a/lib/widgets/horizontal_scroll_with_arrows.dart +++ b/lib/widgets/horizontal_scroll_with_arrows.dart @@ -52,7 +52,15 @@ class _HorizontalScrollWithArrowsState extends State } void _updateScrollState() { - if (!mounted) return; + if (!mounted || _scrollController.positions.length != 1) { + if (mounted && (_canScrollLeft || _canScrollRight)) { + setState(() { + _canScrollLeft = false; + _canScrollRight = false; + }); + } + return; + } final position = _scrollController.position; setState(() { @@ -62,6 +70,7 @@ class _HorizontalScrollWithArrowsState extends State } void _animateScroll(double direction) { + if (_scrollController.positions.length != 1) return; final position = _scrollController.position; final delta = direction * position.viewportDimension * widget.scrollAmount; final targetScroll = (position.pixels + delta).clamp(0.0, position.maxScrollExtent);