From 5358a38bd8bc30cbafe9edf70f27c89fdf96e0f9 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 12 May 2025 21:22:29 +0200 Subject: [PATCH] groups: scroll to top on group change --- .../filter_grids/common/filter_grid_page.dart | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/widgets/filter_grids/common/filter_grid_page.dart b/lib/widgets/filter_grids/common/filter_grid_page.dart index 5f16c71ad..6c49e590d 100644 --- a/lib/widgets/filter_grids/common/filter_grid_page.dart +++ b/lib/widgets/filter_grids/common/filter_grid_page.dart @@ -473,6 +473,8 @@ class _FilterSectionedContentState extends State<_Fi final GlobalKey scrollableKey = GlobalKey(debugLabel: 'filter-grid-page-scrollable'); + FilterGrouping? _grouping; + @override void initState() { super.initState(); @@ -480,6 +482,14 @@ class _FilterSectionedContentState extends State<_Fi WidgetsBinding.instance.addPostFrameCallback((_) => _checkInitHighlight()); } + @override + void didChangeDependencies() { + super.didChangeDependencies(); + _unregisterDependencies(); + _grouping = context.read(); + _registerDependencies(); + } + @override void didUpdateWidget(covariant _FilterSectionedContent oldWidget) { super.didUpdateWidget(oldWidget); @@ -489,10 +499,19 @@ class _FilterSectionedContentState extends State<_Fi @override void dispose() { + _unregisterDependencies(); _unregisterWidget(widget); super.dispose(); } + void _registerDependencies() { + _grouping?.addListener(_scrollToTop); + } + + void _unregisterDependencies() { + _grouping?.removeListener(_scrollToTop); + } + void _registerWidget(_FilterSectionedContent widget) { widget.appBarHeightNotifier.addListener(_onAppBarHeightChanged); } @@ -553,6 +572,8 @@ class _FilterSectionedContentState extends State<_Fi final animate = context.read().animate; highlightInfo.trackItem(item, animate: animate, highlightItem: filter); } + + void _scrollToTop() => widget.scrollController.jumpTo(0); } class _FilterScaler extends StatelessWidget {