ScrollController how can I detect Scroll start, stop and scrolling?
_scrollController.position.pixels
if(_scrollController.position.pixels == _scrollController.position.maxScrollExtent){
//scroll end
}
to use these, you should add a listener to your scrollview
No need for NotificationListener
, we can use solely scroll controller for this.
First, register a post-frame callback by using WidgetsBinding.instance.addPostFrameCallback
to make sure that the scroll controller by that time has already associated with a scroll view. We will setup listener in that callback.
For listening to scrolling update we can use scrollController.addListener
.
For listening to start and stop scrolling we can use bgScrollCtrl.position.isScrollingNotifier.addListener
. You can check the code below:
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
scrollCtrl.addListener(() {
print('scrolling');
});
scrollCtrl.position.isScrollingNotifier.addListener(() {
if(!scrollCtrl.position.isScrollingNotifier.value) {
print('scroll is stopped');
} else {
print('scroll is started');
}
});
});
From this link https://medium.com/@diegoveloper/flutter-lets-know-the-scrollcontroller-and-scrollnotification-652b2685a4ac
Just Wrap your SingleChildScrollView
to NotificationListener
and update your code like ..
NotificationListener<ScrollNotification>(
onNotification: (scrollNotification) {
if (scrollNotification is ScrollStartNotification) {
_onStartScroll(scrollNotification.metrics);
} else if (scrollNotification is ScrollUpdateNotification) {
_onUpdateScroll(scrollNotification.metrics);
} else if (scrollNotification is ScrollEndNotification) {
_onEndScroll(scrollNotification.metrics);
}
},
child: SingleChildScrollView(
/// YOUR OWN CODE HERE
)
)
And just declare method like
_onStartScroll(ScrollMetrics metrics) {
print("Scroll Start");
}
_onUpdateScroll(ScrollMetrics metrics) {
print("Scroll Update");
}
_onEndScroll(ScrollMetrics metrics) {
print("Scroll End");
}
You will be notify by particular method.