Flutter: скроллинг до элемента в списке
Задача: позиционировать по нажатию кнопки список на нужном элементе списка.
Решение: используем пакет scroll_to_index:
1 2 |
dependencies: scroll_to_index : any |
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
class _MainMenuState extends State<MainMenu> { final scaffoldKey = GlobalKey<ScaffoldState>(); final scrollDirection = Axis.vertical; late AutoScrollController controller; @override void initState() { print("-инициализация класса.."); controller = AutoScrollController( viewportBoundaryGetter: () => Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom), suggestedRowHeight: 2000, // если большой список, и скролл визуально идёт медленно, то это "шаг" скролла. Т.е. чем больше, тем быстрее. axis: scrollDirection ); } Future _scrollToCounter(int counter) async { await controller.scrollToIndex(counter, duration: Duration(seconds: 1)); controller.highlight(counter); } .... ... // список ТМЦ для инвентаризации (если есть) body: ListView.builder( physics: NeverScrollableScrollPhysics(), scrollDirection: scrollDirection, controller: controller, padding: const EdgeInsets.all(8), itemCount: globals.TMCList.length, itemBuilder: (BuildContext context, int index) { return AutoScrollTag( key: ValueKey(index), controller: controller, index: index, child: Container( padding: EdgeInsets.symmetric(vertical: 10), child: Column( children: [ Text( globals.TMCList[index]["name"], textAlign: TextAlign.start, ), Align( ..... floatingActionButton: FloatingActionButton( onPressed: (){ _scrollToCounter(10); }, |