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..c6ea0b4f 100644 --- a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart +++ b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart @@ -260,13 +260,38 @@ class ItemScrollController { ); } + final List _onAttachListeners = []; + final List _onDetachListeners = []; + + void addOnAttachListener(VoidCallback listener) { + _onAttachListeners.add(listener); + } + + void removeOnAttachListener(VoidCallback listener) { + _onAttachListeners.remove(listener); + } + + void addOnDetachListener(VoidCallback listener) { + _onDetachListeners.add(listener); + } + + void removeOnDetachListener(VoidCallback listener) { + _onDetachListeners.remove(listener); + } + void _attach(_ScrollablePositionedListState scrollableListState) { assert(_scrollableListState == null); _scrollableListState = scrollableListState; + for (var listener in _onAttachListeners) { + listener(); + } } void _detach() { _scrollableListState = null; + for (var listener in _onDetachListeners) { + listener(); + } } } @@ -293,15 +318,40 @@ class ScrollOffsetController { ); } + final List _onAttachListeners = []; + final List _onDetachListeners = []; + + void addOnAttachListener(VoidCallback listener) { + _onAttachListeners.add(listener); + } + + void removeOnAttachListener(VoidCallback listener) { + _onAttachListeners.remove(listener); + } + + void addOnDetachListener(VoidCallback listener) { + _onDetachListeners.add(listener); + } + + void removeOnDetachListener(VoidCallback listener) { + _onDetachListeners.remove(listener); + } + _ScrollablePositionedListState? _scrollableListState; void _attach(_ScrollablePositionedListState scrollableListState) { assert(_scrollableListState == null); _scrollableListState = scrollableListState; + for (var listener in _onAttachListeners) { + listener(); + } } void _detach() { _scrollableListState = null; + for (var listener in _onDetachListeners) { + listener(); + } } }