【问题标题】:Flutter/Dart PageView - SwipeGestureRecognizer Activated on Initial Page only?Flutter/Dart PageView - SwipeGestureRecognizer 仅在初始页面上激活?
【发布时间】:2020-08-21 21:50:12
【问题描述】:

我在StatelessWidget 中有一个PageView.builder。每个页面都有一个SwipeGestureRecognizer,它提供了一个Navigator.pop(context) onSwipeDown。但我希望此手势仅在用户滚动回initialPage: 0 时触发。对于其余页面,我想要PageView.builder 提供的默认滚动。除了SwipeGestureRecognizer 的存在似乎禁用了所有其他页面上PageViewer 的正常向下滑动默认滚动之外,我已经设法让它几乎正常工作。如何让向下滑动手势仅在第一页上激活?

  class StageBuilder extends StatelessWidget {
  final List<SpeakContent> speakcrafts;
  StageBuilder(this.speakcrafts);    
  final PageController controller = PageController(initialPage: 0);

  @override
  Widget build(context) {
    return PageView.builder(
      controller: controller,
      itemCount: speakcrafts.length,
      itemBuilder: (context, int currentIndex) {
        return createViewItem(speakcrafts[currentIndex], context, currentIndex);
      },
    );
  }

  Widget createViewItem(SpeakContent speakcraft, BuildContext context, int currentIndex) {
  
    return (
        Container(
        child: SwipeGestureRecognizer(some stuff)
        ),
     );
  }
}

onSwipeDown:() {
    if (currentIndex==0)
    Navigator.pop(context);
            },

【问题讨论】:

    标签: flutter dart swipe-gesture flutter-pageview


    【解决方案1】:

    这就是我所做的;

     child: SwipeGestureRecognizer(
    
      onSwipeUp: () {
    
           controller.nextPage(duration: const Duration(milliseconds: 400), curve: Curves.ease);
    
           },
    
      onSwipeDown: () {
    
           (currentIndex == 0)?
    
           Navigator.pop(context):
    
           controller.previousPage(duration: const Duration(milliseconds: 400), curve: Curves.ease);
    
      },
    

    ...)

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2021-11-30
      相关资源
      最近更新 更多