首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter pageview :查找第一页和最后一页,并滑动方向

Flutter pageview :查找第一页和最后一页,并滑动方向
EN

Stack Overflow用户
提问于 2019-03-19 01:33:43
回答 2查看 4.8K关注 0票数 6

我正在开发一个使用flutter的图书应用程序。我使用pageview显示每一章的书页。问题是,当用户在最后一页向左滑动时,我应该从数据库中加载下一章以及章节标题。反之亦然,在前一章的第一页上向右滑动。那么,如何在第一页或最后一页找到该用户,并向左或向右滑动?

EN

回答 2

Stack Overflow用户

发布于 2019-03-19 02:45:39

您可以通过将onPageChanged方法index与您的collection.length进行比较来检查它是否是第一页的最后一页,如下所示:

代码语言:javascript
复制
PageView(
  onPageChanged: (index) {
    if (index + 1 == myCollection.length) {
      loadNextChapter();
    } else if (index == 0) {
      loadPreviousChapter();
    }
  },
);

编辑1:

使用GestureDetector:

代码语言:javascript
复制
PageView mPageView = PageView(
  onPageChanged: (index) {
    if (index + 1 == myCollection.length) {
      hasReachedEnd = true;
    } else if (index == 0) {
      hasReachedFirst = true
    } else {
      hasReachedFirst = false
      hasReachedEnd = false
    }
  },
);

GestureDetector mGestureDetector = GestureDetector(
  child: mPageView
  onHorizontalDragEnd: (dragEndDetails) {
    if (dragEndDetails.primaryVelocity < 0 && hasReachedStart) {
      loadPreviousChapter(); //if you want to go to the next page once fetched you can do so by adding .then()
    } else if (dragEndDetails.primaryVelocity > 0 && hasReachedEnd) {
      loadNextChapter();
    }
  }
);

每当我们向左或向右滚动时,我们都会检查滑动的方向,以及我们是在项目列表的末尾还是开头。

每当我们滚动到新页面时,我们都会检查我们是在项目的末尾还是在项目的开头。

将这些组合在一起将会给你带来想要的效果。

票数 9
EN

Stack Overflow用户

发布于 2019-08-26 21:31:35

我用OverscrollIndicatorNotification解决了这个问题。包括章节和子章节。

代码语言:javascript
复制
    return new Container(
    child: NotificationListener<OverscrollIndicatorNotification>(
        onNotification: ((notification) {
          print(notification.toString());
          if (notification is OverscrollIndicatorNotification) {
            if (notification.depth == 0 ||_listOfCat.indexOf(_category)==0) {
              int index = _listOfSubCat.indexOf(_subCategory);
              if (notification.leading) {
                if (index != 0) {
                  setSubCatId(_listOfSubCat[index - 1]);
                } else {
                  index = _listOfCat.indexOf(_category);
                  if (index != 0) {
                    setCatId(_listOfCat[index - 1]);
                  }
                }
              } else {
                if (index != _listOfSubCat.length - 1) {
                  setSubCatId(_listOfSubCat[index + 1]);
                } else {
                  index = _listOfCat.indexOf(_category);
                  if (index != _listOfCat.length - 1) {
                    setCatId(_listOfCat[index + 1]);
                  }
                }
              }
            }
          }
          return true;
        }),
        child: _pageView=PageView(
          ....
        )
    ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55227030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档