列出基于速度的动画

时间:2019-01-11 10:34:29

标签: flutter flutter-layout flutter-animation

我正在基于以下方式在动画中实现动画示例: https://www.behance.net/gallery/55023357/Flyer-Flight-Booking

Velocity based scroll animation

其中一个动画显示一个列表,该列表的填充根据用户滚动而变化。为此,我需要知道用户的滚动速度何时高于或低于某个阈值。

我知道我可以通过将ListView封装在NotificationListener中来访问ScrollNotifications。通知存储诸如空闲,反向和向前滚动,哪种滚动交互类型等信息。

不幸的是,它似乎没有存储有关增量滚动偏移量或速度的任何信息。我试图从附加到ListView的ScrollController访问ScrollActivity。该活动似乎受到保护,可能会在发布时中断我的应用程序。这是一些代码:

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()设置列表并连接侦听器。当ListView滚动时,他们不能 _onScroll()

  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的当前速度?

0 个答案:

没有答案