【发布时间】: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..
```
【问题讨论】: