Flutter / Dart PageView - SwipeGestureRecognizer активирован только на начальной странице?

У меня 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);
            },

person Meggy    schedule 21.08.2020    source источник


Ответы (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);

  },

...)

person Meggy    schedule 22.08.2020