Флаттер, как получить последнее направление прокрутки PageView - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь определить, в каком направлении (влево или вправо) пользователь пролистал, используя 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 Ответ

0 голосов
/ 06 сентября 2018

Сравните текущий _controller.page.round() со значением из предыдущего вызова слушателя (сохраните предыдущее значение в State).

  • Если текущее значение больше предыдущего, пользователь проведет вправо.
  • Если текущее значение ниже, чем предыдущее значение, пользователь проведет пальцем влево.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...