What I needed:
I want to scroll a list by some index, how can i do that.
What I know:
scrollToIndex
should start from n index, but how can we scroll to any index?
Typically used with [ListView], [GridView], [CustomScrollView]. AutoScrollController extends ScrollController which used in the below sample which contains the additional logic of scrolling. It's internally calculated offset value and performs scrolling till the given index.
If you want to use this controller function, you can add a ScrollNotification and keep calling it over and over again when the scroll ends, until the stop button is pressed.
I used NotificationListener that is a widget that listens for notifications bubbling up the tree. Then use ScrollEndNotification , which indicates that scrolling has stopped. For scroll position I used _scrollController that type is ScrollController .
Unfortunately, ListView has no built-in approach to a scrollToIndex() function. You’ll have to develop your own way to measure to that element’s offset for animateTo()
or jumpTo()
, or you can search through these suggested solutions/plugins or from other posts like Flutter: Scrolling to a widget in ListView
(the general scrollToIndex issue is discussed at flutter/issues/12319 since 2017, but still with no current plans)
But there is a different kind of ListView that does support scrollToIndex (as mentioned by Slashbin):
You set it up exactly like ListView and works the same, except you now have access to a ItemScrollController that does:
jumpTo({index, alignment})
scrollTo({index, alignment, duration, curve})
Simplified example:
ItemScrollController _scrollController = ItemScrollController(); ScrollablePositionedList.builder( itemScrollController: _scrollController, itemCount: _myList.length, itemBuilder: (context, index) { return _myList[index]; }, ) _scrollController.scrollTo(index: 150, duration: Duration(seconds: 1));
(note that this library is developed by Google but not by the core Flutter team.)
ScrollablePositionedList
can be used for this. https://github.com/google/flutter.widgets/tree/master/packages/scrollable_positioned_list
Pub link - https://pub.dev/packages/scrollable_positioned_list
final ItemScrollController itemScrollController = ItemScrollController(); final ItemPositionsListener itemPositionListener = ItemPositionsListener.create();
ScrollablePositionedList.builder( itemCount: 500, itemBuilder: (context, index) => Text('Item $index'), itemScrollController: itemScrollController, itemPositionsListener: itemPositionListener, );
One then can scroll to a particular item with:
itemScrollController.scrollTo( index: 150, duration: Duration(seconds: 2), curve: Curves.easeInOutCubic);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With