You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 11:21:02