在数据未渲染到视图上时在调用滚动前判断滚动控制器是否有需要滚动的客户_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);
});