Dart ScrollController如何检测滚动开始、停止和滚动?
我正在为Dart ScrollController如何检测滚动开始、停止和滚动?,dart,flutter,Dart,Flutter,我正在为SingleChildScrollView小部件使用ScrollController,我想在其中检测滚动开始、结束/停止和仍然滚动的时间 如何检测,我正在使用Listene scrollController = ScrollController() ..addListener(() { scrollOffset = _scrollController.offset; }); 还可以尝试使用\u scrollController.position.
SingleChildScrollView
小部件使用ScrollController,我想在其中检测滚动开始、结束/停止和仍然滚动的时间
如何检测,我正在使用Listene
scrollController = ScrollController()
..addListener(() {
scrollOffset = _scrollController.offset;
});
还可以尝试使用\u scrollController.position.activity.velocity
,但没有帮助我
还有
_scrollController.position.didEndScroll();
_scrollController.position.didStartScroll();
但是我怎么用呢
_scrollController.position.pixels
if(_scrollController.position.pixels == _scrollController.position.maxScrollExtent){
//scroll end
}
要使用这些,您应该从此链接向scrollview添加一个侦听器
只需将您的SingleChildScrollView
包装到NotificationListener
并更新您的代码,如
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
)
)
您将通过特定的方法收到通知。NotificationListner不适用于我,因为我设置了scrollview动画。当我触摸它时,将调用ScrollEndNotification 所以要检测滚动视图,请到达底部或顶部。我将Listner添加到scrollcontroller
_scrollController.addListener(_scrollListener);
_scrollListener() {
if (_scrollController.offset >= _scrollController.position.maxScrollExtent &&
!_scrollController.position.outOfRange) {
setState(() {
debugPrint("reach the top");
});
}
if (_scrollController.offset <= _scrollController.position.minScrollExtent &&
!_scrollController.position.outOfRange) {
setState(() {
debugPrint("reach the top");
});
}
}
\u scrollController.addListener(\u scrollListener);
_scrollListener(){
如果(\u scrollController.offset>=\u scrollController.position.maxScrollExtent&&
!\u滚动控制器。位置。超出范围){
设置状态(){
调试打印(“到达顶部”);
});
}
如果(_scrollController.offset不需要NotificationListener
,我们可以单独使用scroll controller进行此操作
首先,使用WidgetsBinding.instance.addPostFrameCallback
注册后期帧回调,以确保此时滚动控制器已与滚动视图关联。我们将在该回调中设置侦听器
要收听滚动更新,我们可以使用scrollController.addListener
要收听开始和停止滚动,我们可以使用bgcrollctrl.position.isScrollingNotifier.addListener
。您可以检查以下代码:
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');
}
});
});
谢谢,但我想检测滚动的开始和停止。你可以只检测滚动的结束。这是我的错误,让我更新问题你可以使用position.pixels for it你怎么能给我expampleif position.pixels大于minScrollExtent然后滚动开始这是我想要的,简短而精确。谢谢分享!)
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');
}
});
});