- Заметки
- PageView свайп в одну сторону
За последние 30 дней: 7 просмотров, 6 посетителей.
PageView свайп в одну сторону
По умолчанию виджет PageView прокручивается с помощью касания в обе стороны.
Чтобы запретить прокрутку с помощью касания, нужно в параметре physics задать значение NeverScrollableScrollPhysics().
И тогда чтобы переходить от страницы к странице нужен объект PageController, заданный в параметре controller.
Для перехода к другой странице нужно вызвать метод _pageController.jumpToPage()
Для анимированного перехода нужно использовать _pageController.animateToPage()
Односторонняя прокрутка
Но что делать если мы хотим, чтобы пользователь мог прокрутить касанием только в одну сторону - например назад, для возвращения к предыдущему экрану. А к следующему экрану только с помощью бизнес логики приложения.
С помощью метода addListener зарегистрируем обработчик событий для объекта класса PageController.
Такой обработчик события будет выводить в консоль сообщения, с текущим состоянием, во время прокрутки PageView.
Т.к. NeverScrollableScrollPhysics() блокирует все пользовательские жесты, мы не будем его использовать, а блокировать свайп вперед будем в обработчике событий.
Код обработчика односторонней прокрутки
Что происходит в обработчике для односторонней прокрутки
indexPage - в этой переменной должен быть номер страницы, которую должен видеть пользователь.
- Если пользователь делает свайп для прокрутки вперед
- И если текущая позиция меньше той к которой может привести свайп вперед
- Делаем переход без анимации к установленной странице, чтобы прервать и отменить свайп вперед
- Если пользователь выполняет свайп назад
- И если текущее состояние положения прокрутки равно целому значения
- Изменяем номер страницы которая должна быть открыта
Функция бизнес логики для смены страницы
Метод onPageChanged в PageView
В виджете PageView можно задать метод onPageChanged
В данном примере не рекомендуем его использовать, и выполнять все проверки и смену состояния в одном месте: _pageController.addListener((){}).