0

我有一个PageView.builder内一个StatelessWidget。每个页面都有一个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);
            },
4

1 回答 1

0

所以这就是我所做的;

 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-08-22T10:52:35.937 回答