我有一个滚动控制器,它检查滚动位置是否超过阈值,然后调用该函数:
final _scrollController = ScrollController();
final _scrollThreshold = 200.0;
_scrollController.addListener(_onScroll);
void _onScroll() {
final maxScroll = _scrollController.position.maxScrollExtent;
final currentScroll = _scrollController.position.pixels;
if (maxScroll - currentScroll <= _scrollThreshold) {
dummyFunction();
}
}
当前, dummyFunction()被多次调用,如何确保一次被调用?
答案 0 :(得分:1)
我不确定您要实现的目标是什么,但是我认为您可以使用controller.position
,这是当前可滚动部分。此变量包含有关其在滚动条中的位置的信息,例如extentBefore
和extentAfter
。 extentAfter
表示可用的剩余滚动空间,因此您可以执行以下操作来触发功能:
void _onScroll() {
if (controller.position.extentAfter < someThreshold) {
_dummyFunction()
}
}
答案 1 :(得分:0)
使用boolean
存储该函数是否被调用:
final _scrollController = ScrollController();
final _scrollThreshold = 200.0;
_scrollController.addListener(_onScroll);
final _hasReachedPoint = false;
void _onScroll() {
final maxScroll = _scrollController.position.maxScrollExtent;
final currentScroll = _scrollController.position.pixels;
if (maxScroll - currentScroll <= _scrollThreshold && !_hasReachedPoint) {
_hasReachedPoint = true;
dummyFunction();
}
}