在数据未渲染到视图上时在调用滚动前判断滚动控制器是否有需要滚动的客户_controller.hasClients
WidgetsBinding widgetsBinding=WidgetsBinding.instance;
_controller = new ScrollController(initialScrollOffset: 0);
if(_controller.hasClients){
widgetsBinding.addPostFrameCallback((callback){
gonggaoTimer = Timer.periodic(new Duration(seconds: 2), (timer){
if(_gonggaoKey.currentContext==null){
index+=44;
}else{
index+=_gonggaoKey.currentContext.size.height.toInt();
}
_controller.animateTo((index).toDouble(), duration: new Duration(seconds: 2), curve: Curves.easeOutSine);
//滚动到底部从头开始
if((index-_gonggaoKey.currentContext.size.height.toInt()).toDouble()>_controller.position.maxScrollExtent){
_controller.jumpTo(_controller.position.minScrollExtent);
index=0;
}
});
});
}
确保视图能渲染完成时则无需判断:
WidgetsBinding.instance.addPostFrameCallback((_){
_scrollController.animateTo(
_scrollController.position.maxScrollExtent,
duration: Duration(milliseconds: 400),
curve: Curves.linear);
});
这篇博客介绍了如何在Flutter中利用WidgetsBinding和ScrollController来实现视图渲染后的滚动操作,并通过_addPostFrameCallback判断视图是否完成渲染。文章详细阐述了在数据未加载到视图时如何判断滚动控制器是否需要滚动,以及如何设置定时器实现滚动到底部后重新开始的效果。同时,还展示了在视图渲染完成后直接进行滚动的方法。

被折叠的 条评论
为什么被折叠?



