Flutter InteractiveViewer如何移除拖拽后的pan惯性跟随效果
实现方案
要移除InteractiveViewer的惯性滑动效果,只需要对你自定义的CustomSecondTransformationController做少量修改,再配合InteractiveViewer的参数配置即可,具体步骤如下:
步骤1:重写自定义TransformationController的fling方法
惯性滑动的核心是TransformationController的fling方法触发的速度动画,直接空实现该方法即可彻底禁用惯性:
class CustomSecondTransformationController extends TransformationController { // 补充原有代码缺失的_before变量定义 Offset? _before; CustomSecondTransformationController([Matrix4? value]) : super(value ?? Matrix4.identity()); set before(Offset value) { _before = value; } Offset toScene(Offset viewportPoint) { Offset vp = viewportPoint; final Matrix4 inverseMatrix = Matrix4.inverted(value); final Vector3 untransformed = inverseMatrix.transform3(Vector3( vp.dx, vp.dy, 0, )); return Offset(untransformed.x / 3, untransformed.y / 3); } // 新增:重写fling方法空实现,直接禁用惯性动画 @override void fling(Offset velocity, {double? scale}) { // 不执行任何动画逻辑,直接结束交互 } }
步骤2:配置InteractiveViewer的边界回弹效果(可选)
如果同时需要取消拖拽到边界的弹性回弹效果,可以给InteractiveViewer设置physics参数:
InteractiveViewer( transformationController: _yourCustomController, // 禁用边界回弹 physics: const ClampingScrollPhysics(), // 其他原有配置保持不变 )
修改完成后拖拽结束时不会再有惯性滑动,也可根据需求关闭边界弹性效果,完全符合刚性交互的需求。
内容的提问来源于stack exchange,提问作者David Foie Gras
相关产品推荐
相关产品推荐

