颤振:滚动期间的调用功能

时间:2020-02-19 08:28:15

标签: flutter dart

我有一个滚动控制器,它检查滚动位置是否超过阈值,然后调用该函数:

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()被多次调用,如何确保一次被调用?

2 个答案:

答案 0 :(得分:1)

我不确定您要实现的目标是什么,但是我认为您可以使用controller.position,这是当前可滚动部分。此变量包含有关其在滚动条中的位置的信息,例如extentBeforeextentAfterextentAfter表示可用的剩余滚动空间,因此您可以执行以下操作来触发功能:

  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();
  }
}