Omar Farrag
Omar Farrag

Reputation: 313

ScrollController animateTo()

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

Upvotes: 14

Views: 27973

Answers (1)

etzuk
etzuk

Reputation: 496

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);
});

Upvotes: 28

Related Questions