ScrollController animateTo()

Omar Farrag picture Omar Farrag · Nov 23, 2018 · Viewed 7.3k times · Source

I want the selected item in the horizontal listView to be centered, so I first calculate the position that should animate to (scroll to), and it is always calculated correctly, but when I select an item that is far from the currently selected one, the list doesn't scroll correctly to the calculated position.

Code:

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

where _width is the width of all elements but the selected one, as its width is _selectedWidth , and horizontal padding is constant .. and index is the index of the selected item

Answer

etzuk picture etzuk · Dec 24, 2019

Try wrapping the scroll with PostFrameCallback

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