Hola, Amigos! Сегодня хотим с вами поделиться небольшим лайфхаком, как проскролить список к добавленному элементу после того, как мы добавили новый элемент в этот список.
Код ниже проскролит список лишь к предпоследнему элементу:
IconButton(
icon: const Icon(Icons.send),
onPressed: () {
setState(() {
list.add('new text');
controller.clear();
});
scrollController.jumpTo(scrollController.position.maxScrollExtent);
},
);Есть два пути решения:
⚙️ Режим джуна — добавить задержку между setState и scrollController. Но за такой «костыль» вас не похвалят😅
⚙️ Подход продвинутого программиста — использовать объект WidgetBinding:
IconButton(
icon: const Icon(Icons.send),
onPressed: () {
setState(() {
list.add('new text');
controller.clear();
});
WidgetsBinding.instance.addPostFrameCallback(
(_) =>
scrollController.jumpTo(scrollController.position.maxScrollExtent));
},
);Суть данного подхода заключается в добавлении вызова после того, как текущий кадр будет отрисован.
Хорошего всем кода! Делитесь своим опытом и лайфхаками в чате 🦋