代码之家  ›  专栏  ›  技术社区  ›  Daibaku

颤振如何获得最后一页浏览滚动方向

  •  0
  • Daibaku  · 技术社区  · 7 年前

    我试图得到哪个方向(左或右)用户刷使用 PageView . 我能像这样找到方向。

     PageController _controller;
    
      @override
      void initState() {
        _controller = new PageController()..addListener(_listener);
        super.initState();
      }
    
      _listener() {
        if (_controller.position.userScrollDirection == ScrollDirection.reverse) {
          print('swiped to right');
        } else {
          print('swiped to left');
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(),
          body: PageView.builder(
              itemCount: 10,
              controller: _controller,
              itemBuilder: (context, index) {
                return new Center(child: Text('item ${++index}'));
              }),
        );
      }
    

    print 方法 有没有办法我可以得到这个后,目前的网页切换到下一页完全?

    颤振:向右滑动
    颤振:向右滑动
    颤振:向右滑动
    颤振:向右滑动


    颤振:向右滑动

    颤振:向右滑动

    颤振:向右滑动

    1 回复  |  直到 7 年前
        1
  •  2
  •   boformer    7 年前

    比较电流 _controller.page.round() 使用来自上一个侦听器调用的值(将上一个值存储在 State

    • 如果当前值大于上一个值,则用户向右滑动。
        2
  •  8
  •   ThinkDigital    6 年前

     PageView(
     onPageChanged: (int page) { 
     // this page variable is the new page and will change before the pageController fully reaches the full, rounded int value
       var swipingRight = page > pageController.page;
       print(swipingRight);
      },
    
        3
  •  2
  •   Merritt    5 年前

    最后我使用了一个手势检测器,完全禁用了页面浏览手势。

    这个 NeverScrollableScrollPhysics()

    class MyPageView extends StatefulWidget {
      @override
      _MyPageViewState createState() => _MyPageViewState();
    }
    
    class _MyPageViewState extends State<MyPageView> {
      PageController _pageController;
      Duration pageTurnDuration = Duration(milliseconds: 500);
      Curve pageTurnCurve = Curves.ease;
    
      @override
      void initState() {
        super.initState();
        // The PageController allows us to instruct the PageView to change pages.
        _pageController = PageController();
      }
    
      void _goForward() {
        _pageController.nextPage(duration: pageTurnDuration, curve: pageTurnCurve);
      }
    
      void _goBack() {
        _pageController.previousPage(
            duration: pageTurnDuration, curve: pageTurnCurve);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: GestureDetector(
            // Using the DragEndDetails allows us to only fire once per swipe.
            onHorizontalDragEnd: (dragEndDetails) {
              if (dragEndDetails.primaryVelocity < 0) {
                // Page forwards
                print('Move page forwards');
                _goForward();
              } else if (dragEndDetails.primaryVelocity > 0) {
                // Page backwards
                print('Move page backwards');
                _goBack();
              }
            },
            child: PageView.builder(
                itemCount: 10,
                controller: _pageController,
                // NeverScrollableScrollPhysics disables PageView built-in gestures.
                physics: NeverScrollableScrollPhysics(),
                itemBuilder: (context, index) {
                  return new Center(child: Text('item ${++index}'));
                }),
          ),
        );
      }
    }
    
        4
  •  0
  •   Patrick Waweru    5 年前

    你的代码没问题,只需添加一个setState 这样地

    PageController _controller;
    
      @override
      void initState() {
        _controller = new PageController()..addListener(_listener);
        super.initState();
      }
    
      _listener() {
        setState(() {
          if (_controller.position.userScrollDirection == ScrollDirection.reverse) {
            print('swiped to right');
          } else {
            print('swiped to left');
          }
        });
    
      }