滚动事件触发函数的时间太多了

问题描述 投票:0回答:2

我有一个用于隐藏和显示底部导航栏的滚动侦听器,它工作得很好,但我发现如果我滚动得太快,它会在满足条件时触发该功能近 50 次甚至更多。这意味着它会多次重建小部件,对吗?我怎样才能防止这种情况发生。

updateBottomBar
是一个回调函数来设置父控件的状态。

bottomBarVisible
是显示和隐藏底部导航栏的变量。

 @override
  void initState() {
    scrollController.addListener(() {
      //listener
     
      if (scrollController.position.userScrollDirection ==
              ScrollDirection.reverse &&
          widget.bottomBarVisible == true) {
        print("it is hide");
        widget.updateBottomBar(false);
      } else if (scrollController.position.userScrollDirection ==
              ScrollDirection.forward &&
          widget.bottomBarVisible == false) {
        print("it is show");
        widget.updateBottomBar(true);
      }
    });
flutter scroll repeat
2个回答
1
投票

我看到您已经在通过调用

widget.bottomBarVisible == true
将其设置为
false
之前检查
widget.updateBottomBar(false)
。那么这意味着,它只会调用你的函数一次,对吧?

如果不是这种情况,也许您没有足够快地更新

bottomBarVisible
变量。我建议您在
updateBottomBar()
函数中首先更新变量,以防止快速触发。


0
投票

addListener
滚动未完成时多次工作。您可以使用
atEdge
函数处理,该函数将在滚动完成时返回
true

sController.position.atEdge

sController.addListener(() async {
          if (sController.position.userScrollDirection ==
              ScrollDirection.reverse && sController.position.atEdge) {
            goNextPage();
          } else if (sController.position.userScrollDirection ==
              ScrollDirection.forward && sController.position.atEdge) {
            goPreviousPage();
          }
        });

© www.soinside.com 2019 - 2024. All rights reserved.