Что ж, я думаю, что вы на правильном пути для достижения этого!
Вам следует попробовать _controller.jumpTo()
и запустить это событие программно.
Вы можете создать таймер и вызвать _controller там, через 500 миллисекунд (полсекунды).
ScrollController _myController = ScrollController();
@override
Widget build(BuildContext context) {
// here we set the timer to call the event
Timer(Duration(milliseconds: 500), () => _myController.jumpTo(_myController.position.maxScrollExtent));
// add _myController to the ListView
return ListView.builder(
controller: _myController,
// itemCount: yourItemsCount,
// ...
)
}
Пожалуйста, проверьте этот ответ также -> Программная прокрутка до конца ListView
А также этот -> Как получить полный размер ScrollController
Там они используют SchedulerBinding.instance.addPostFrameCallback
, что, я думаю, также является хорошим решением для запуска вашей прокрутки.
SchedulerBinding.instance.addPostFrameCallback((_) {
_myController.animateTo(
_myController.position.maxScrollExtent,
duration: const Duration(milliseconds: 500),
curve: Curves.easeOut,
);
});
ОБНОВЛЕНИЕ:
Пожалуйста, попробуйте этот код, без перехода , без видимого перехода к меня.
Это комбинация моих предыдущих абзацев.
Просто будьте осторожны, если число строк возрастет, например, 10000.
Но я думаю, что вы должны контролировать количество отображаются сообщения.
Widget build(BuildContext context) {
final items = List<String>.generate(50, (i) => "Item $i");
ScrollController _controller = ScrollController();
SchedulerBinding.instance.addPostFrameCallback((_) {
_controller.jumpTo(_controller.position.maxScrollExtent);
});
return Scaffold(
body: SafeArea(
child: ListView.builder(
controller: _controller,
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
},
),
));
}