【问题标题】:Scroll down/up function being called 3 times instead of once. How can i make the function be called only once whenever the user scrolls?向下/向上滚动功能被调用 3 次而不是一次。每当用户滚动时,我怎样才能使该函数只被调用一次?
【发布时间】:2022-06-15 19:03:34
【问题描述】:

伙计们,我创建了一个监听用户滚动的函数。当用户向下滚动时,pageno 应更改为当前页面上方的页面 当用户向上滚动时,页面应更改为上一页。 共 4 页 这意味着当用户在第 1 页并向上滚动时,他应该转到第 2 页 当用户在第 2 页时,他应该在向下滚动时转到第 1 页。 Tha变量发生变化,打印屏幕工作。 问题是当我滚动时,它调用滚动函数 3 次而不是一次。 这使它从第 1 页跳转到第 4 页。 我怎样才能使滚动功能在用户滚动时只调用一次而不是 3 次?

// the variables i use:
  final ScrollController _scrollController = ScrollController();
  bool page1 = true;
  bool page2 = false;
  bool page3 = false;
  bool page4 = false;
// the function
  return Scaffold(
      backgroundColor: bgcolor,
      body: NotificationListener<ScrollNotification>(
        onNotification: (scrollNotification) {
       
    
 //listens to the user scroll down
          if (_scrollController.position.userScrollDirection ==
              ScrollDirection.reverse) {
//increases page number by 1 based on current page

            if (pageno == 1) {
              setState(() {
                pageno = 2;
                print(pageno);
              });
            } else if (pageno == 2) {
              setState(() {
                pageno = 3;
                print(pageno);
              });
            } else if (pageno == 3) {
              setState(() {
                pageno = 4;
                print(pageno);
              });
            }

            //checks that the user scrolled up
          } else if (_scrollController.position.userScrollDirection ==
              ScrollDirection.forward) { 
            print('scrolled up');
            if (pageno == 4) { //reduces the page number by 1 based on currentpage 
              setState(() {
                pageno = 3;
                print(pageno);
              });
            } else if (pageno == 3) {
              setState(() {
                pageno = 2;
                print(pageno);
              });
            } else if (pageno == 2) {
              setState(() {
                pageno = 1;
                print(pageno);
              });
            }
            //setState function
          }
          return true;
        },
        child: ListView(
          controller: _scrollController,
          scrollDirection: Axis.vertical,
          children: <Widget>[ 
    //a bunch of stuff here..
    ```

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你得到答案了吗?我也遇到了同样的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-20
      • 2011-01-16
      • 2015-12-06
      • 1970-01-01
      • 2023-04-10
      • 2016-04-21
      • 2016-03-23
      • 1970-01-01
      相关资源
      最近更新 更多