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

Flutter中如何测量触摸压力?ForcePress返回值异常求解决

解决Flutter中触摸压力连续测量的问题

Flutter自带的GestureDetector的ForcePress系列回调本来就不是用来获取连续压力值的——它只是对3D Touch/Force Touch的简化封装,只区分“普通触摸”和“用力按压”两个状态,所以pressure只能返回0或1,这是设计限制,没法通过它实现连续压力测量。

要获取真实的连续触摸压力值,你需要直接监听原始指针事件,用Listener组件来获取PointerEvent里的原生压力数据:

Listener(
  onPointerDown: (PointerDownEvent event) {
    print('按压初始压力: ${event.pressure}');
  },
  onPointerMove: (PointerMoveEvent event) {
    print('实时变化压力: ${event.pressure}');
  },
  child: Container(
    width: double.infinity,
    height: double.infinity,
    color: Colors.grey.shade200,
    child: const Center(child: Text('按压屏幕测试压力')),
  ),
)

注意事项:

  • 硬件限制:不是所有设备都支持压力感应。大部分Android设备没有对应的硬件模块,此时pressure会固定返回1.0;只有支持3D Touch的iOS设备(如iPhone 6s及后续部分机型)、部分高端Android机型能返回连续的压力数值。
  • 数值范围:不同设备的压力取值范围可能有差异,event.pressureMax字段可以获取当前设备支持的最大压力值,你可以用它来做数值归一化处理。
  • 事件冲突:Listener是原始事件监听,不会处理上层手势(如点击、滑动)。如果需要同时处理手势识别和压力测量,可以结合GestureDetector使用,或者用RawGestureDetector自定义手势逻辑。

内容的提问来源于stack exchange,提问作者A-E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:07