为了在显示后立即使用ScrollController滚动ListView,我必须延迟调用animateTo函数,否则在调用animateTo函数时不会呈现布局。
有没有办法获得布局渲染事件,然后除了使用Timer之外还调用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);
});
}
答案 0 :(得分:2)
刚刚发布的软件包https://pub.dartlang.org/packages?q=after_layout为此提供了一个混合。
使用
simpleStickySidebar('#left', {
container: '.sidebar', // sidebar relative element
topSpace: 61 // Default : 0
bottomSpace: 20 // Default : 0
});