Flutter:如何停止SingleChildScrollView通过animateTo触发的滚动动画
解决方案
你可以通过滚动控制器的position内置方法直接终止正在运行的滚动动画,具体实现如下:
方案1:直接终止动画(推荐,最轻量)
在停止按钮的点击回调中调用position.stop()方法即可,该方法会立即中断当前所有滚动动画,页面停在终止时的滚动位置:
// 停止滚动按钮的点击事件 onTap: () { // 先判断控制器已绑定滚动组件,避免空异常 if (_scrollController.hasClients) { _scrollController.position.stop(); } }
方案2:强制跳转固定位置终止动画
如果你需要在终止动画的同时跳转到指定滚动位置,可以用jumpTo方法,若要停在当前位置直接传入当前偏移量即可:
onTap: () { if (_scrollController.hasClients) { // 传入当前滚动偏移量,页面停在当前位置同时终止动画 _scrollController.jumpTo(_scrollController.offset); // 如果需要停止后跳转到其他位置,直接替换参数即可,例如跳转到顶部:_scrollController.jumpTo(0) } }
注意事项
- 两种方案都支持终止
animateTo触发的动画,也可以终止用户拖拽、惯性滚动等其他滚动行为 hasClients判断必须添加,否则当SingleChildScrollView未渲染完成、控制器未绑定到滚动组件时调用方法会抛出异常
内容的提问来源于stack exchange,提问作者Nitiphone Xayaseng
相关产品推荐
相关产品推荐

