Чтобы прокрутить ListView с помощью ScrollController сразу после его отображения, мне нужно вызвать функцию animateTo с задержкой, поскольку в противном случае макет не отображается во время вызова функции animateTo.
Есть ли способ получить событие визуализации макета, а затем вызвать функцию animateTo или другое решение помимо использования таймера?
class MainPageState extends State<MainPage> {
bool listViewVisible = false;
ScrollController _scrollController = new ScrollController();
@override
Widget build(BuildContext context) {
return new Container(
child: !listViewVisible ? null :
new ListView(
controller: _scrollController,
children: <Widget>[
//Some Items
],
),
);
}
//does not work
void showAndScrollListViewWithoutTimer() {
setState(() {
listViewVisible = true;
});
_scrollController.animateTo(100.0,
duration: const Duration(milliseconds: 300),
curve: Curves.easeOut);
}
//works
void showAndScrollListViewWithTimer() {
setState(() {
listViewVisible = true;
});
new Timer(const Duration(milliseconds: 500), () {
_scrollController.animateTo(100.0,
duration: const Duration(milliseconds: 300),
curve: Curves.easeOut);
});
}