From c71407f77b8b9107d62c7f58d2e3f4634cf670e0 Mon Sep 17 00:00:00 2001 From: Andrey Garanin Date: Tue, 25 Jul 2023 10:19:01 +0300 Subject: [PATCH] add scroll controller --- .../lib/src/scrollable_positioned_list.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart index 60045e9b..e656b62d 100644 --- a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart +++ b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart @@ -42,6 +42,7 @@ class ScrollablePositionedList extends StatefulWidget { required this.itemBuilder, Key? key, this.itemScrollController, + this.scrollController, this.shrinkWrap = false, ItemPositionsListener? itemPositionsListener, this.scrollOffsetController, @@ -73,6 +74,7 @@ class ScrollablePositionedList extends StatefulWidget { Key? key, this.shrinkWrap = false, this.itemScrollController, + this.scrollController, ItemPositionsListener? itemPositionsListener, this.scrollOffsetController, ScrollOffsetListener? scrollOffsetListener, @@ -94,6 +96,8 @@ class ScrollablePositionedList extends StatefulWidget { scrollOffsetNotifier = scrollOffsetListener as ScrollOffsetNotifier?, super(key: key); + final ScrollController? scrollController; + /// Number of items the [itemBuilder] can produce. final int itemCount; @@ -405,6 +409,11 @@ class _ScrollablePositionedListState extends State @override Widget build(BuildContext context) { + if (widget.scrollController?.positions.isEmpty == true) + WidgetsBinding.instance.addPostFrameCallback((_) { + widget.scrollController?.attach(primary.scrollController.position); + }); + return LayoutBuilder( builder: (context, constraints) { final cacheExtent = _cacheExtent(constraints); @@ -610,6 +619,7 @@ class _ScrollablePositionedListState extends State if (mounted) { setState(() { if (opacity.value >= 0.5) { + widget.scrollController?.detach(primary.scrollController.position); // Secondary [ListView] is more visible than the primary; make it the // new primary. var temp = primary;