首页 > 解决方案 > ScrollController animateTo()

问题描述

我希望水平listView中的选定项目居中,所以我首先计算应该动画到(滚动到)的位置,并且它总是计算正确,但是当我选择一个远离当前选定的项目时,列表无法正确滚动到计算的位置。

代码:

double _position =  index * (_width + 2 * _horizontalPadding)
                    + (_selectedWidth+_horizontalPadding);
_scrollController.animateTo(
                  _position,
                  duration: Duration(milliseconds: 1000),
                  curve: Curves.ease);

其中 _width 是除所选元素之外的所有元素的宽度,因为它的宽度是 _selectedWidth ,并且水平填充是恒定的.. 并且 index 是所选项目的索引

标签: flutterflutter-animation

解决方案


尝试用 PostFrameCallback 包裹滚动

WidgetsBinding.instance.addPostFrameCallback((_) {
    double _position =  index * (_width + 2 * _horizontalPadding)
                    + (_selectedWidth+_horizontalPadding);
    _scrollController.animateTo(
                  _position,
                  duration: Duration(milliseconds: 1000),
                  curve: Curves.ease);
}

推荐阅读