Анимация на основе скорости списка
Я работаю над реализацией примеров анимации во флаттере, основываясь на этом: https://www.behance.net/gallery/55023357/Flyer-Flight-Booking
Одна из анимаций показывает список, который изменяется в зависимости от пользовательской прокрутки. Для этого мне нужно знать, когда скорость прокрутки пользователя выше или ниже определенного порога.
Я знаю, что могу получить доступ к ScrollNotifications, обернув ListView в NotificationListener. В уведомлениях хранятся такие данные, как простоя, обратная и прямая прокрутка, тип взаимодействия прокрутки и т. Д.
К сожалению, он не хранит никакой информации о смещениях или скорости дельта-прокрутки. Я пытался получить доступ к ScrollActivity из ScrollController, прикрепленного к ListView. Кажется, что действие защищено, что может привести к поломке моего приложения при выпуске. Вот некоторый код:
ScrollController _scrollController; // ListView controller
AnimationController _itemSpacingController; // Smooth change of padding for the list items
// Build the list
Widget _buildSectionPage() {
var section = widget.section;
var itemCount = section.cells.length;
return NotificationListener<ScrollNotification>(
onNotification: _onScroll,
child: ListView.builder(
controller: _scrollController,
itemBuilder: (BuildContext context, int index) {
return _buildSectionCell(
context, section.cells[index], index, itemCount);
},
itemCount: itemCount,
padding: EdgeInsets.only(right: 8.0, top: 16.0),
itemExtent: SectionView._cellHeight +
(1.0 + _itemSpacingController.value) * DEFAULT_ITEM_SPACING,
physics: AlwaysScrollableScrollPhysics(),
),
);
}
_buildSectionPage () устанавливает список и подключает слушателей. Они не могут _onScroll() при прокрутке ListView.
bool _onScroll(ScrollNotification notification) {
if (notification is UserScrollNotification) {
if (notification.direction == ScrollDirection.idle) {
_itemSpacingController.reverse();
} else {
if (_scrollController.position.activity.velocity <= 0.5) {
_itemSpacingController.forward();
}
}
}
return false;
}
_scrollController.position.activity.velocity
защищен. Кажется, это единственный способ получить текущую скорость события прокрутки. Знаете ли вы какой-либо другой способ получить текущую скорость ScollNotification?