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..ef3c1271 100644 --- a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart +++ b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart @@ -57,6 +57,7 @@ class ScrollablePositionedList extends StatefulWidget { this.addAutomaticKeepAlives = true, this.addRepaintBoundaries = true, this.minCacheExtent, + this.controllerListener, }) : assert(itemCount != null), assert(itemBuilder != null), itemPositionsNotifier = itemPositionsListener as ItemPositionsNotifier?, @@ -87,6 +88,7 @@ class ScrollablePositionedList extends StatefulWidget { this.addAutomaticKeepAlives = true, this.addRepaintBoundaries = true, this.minCacheExtent, + this.controllerListener, }) : assert(itemCount != null), assert(itemBuilder != null), assert(separatorBuilder != null), @@ -94,6 +96,10 @@ class ScrollablePositionedList extends StatefulWidget { scrollOffsetNotifier = scrollOffsetListener as ScrollOffsetNotifier?, super(key: key); + /// Optional listener for the primary scroll controller. + /// Called once after first frame. + final void Function(ScrollController controller)? controllerListener; + /// Number of items the [itemBuilder] can produce. final int itemCount; @@ -345,8 +351,12 @@ class _ScrollablePositionedListState extends State if (!_isTransitioning | (widget.scrollOffsetNotifier?.recordProgrammaticScrolls ?? false)) { widget.scrollOffsetNotifier?.changeController.add(offsetChange); + widget.controllerListener?.call(primary.scrollController); } }); + WidgetsBinding.instance.addPostFrameCallback((_) { + widget.controllerListener?.call(primary.scrollController); + }); } @override