ScrollController, прикрепленный к нескольким представлениям прокрутки - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть виджет с отслеживанием состояния как таковой

final _scrollController = TrackingScrollController();

PageView(
  controller: _pageController,
  children: <Widget>[
    _ListView(controller: _scrollController),
    _ListView(controller: _scrollController),
    _ListView(controller: _scrollController),
  ],
)

Это, кажется, соответствует схеме, показанной здесь https://docs.flutter.io/flutter/widgets/TrackingScrollController-class.html

Однако, когда я прокручиваю один список, остальные не синхронизируются, и я получаю эту ошибку для каждого кадра

flutter: Another exception was thrown: ScrollController attached to multiple scroll views.

Есть идеи, что я делаю не так? Есть ли у меня необоснованные ожидания от TrackingScrollController?

Ответы [ 2 ]

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

TrackingScrollController отвечает только за создание initialScrollOffset , которое, как и следовало ожидать, только начальное смещение при построении .

TrackingScrollController просто создает карту ScrollPositions для каждого ListView и прислушивается к каждому из них для изменений, сохраняя это как новую начальную позицию прокрутки, которая будет использоваться при визуализации следующего ListView.

Каково ваше ожидаемое поведение по сравнению с тем, что вы видите? Пожалуйста, предоставьте больше информации относительно вашей цели и реализации, если можете.

Что касается исключения:

флаттер: было выброшено еще одно исключение: ScrollController подключен к нескольким представлениям прокрутки.

Выдается, когда вы используете get controller.positon , в то время как у вас есть несколько прикрепленных позиций, то есть вы можете использовать это значение только тогда, когда прикрепить одну позицию.

Вы можете использовать get для controller.positions (обратите внимание на множественное число, это итеративно)

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

Получаете ли вы положение прокрутки _trackingScrollController? Если это так, вы получите ошибку.

Ниже приведена реализация get postion внутри ScrollController, которая является базовой для TrackingScrollController.

ScrollPosition get position {
  assert(_positions.isNotEmpty, 'ScrollController not attached to any scroll views.');
  assert(_positions.length == 1, 'ScrollController attached to multiple scroll views.');
  return _positions.single;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...