Dart中是否有方法可以获取触摸事件的压力值
Flutter触摸压力值获取方案
在Android系统中,我们可以使用getPressure获取事件的压力值,在iOS系统中可以使用force属性实现该需求。那么在使用Dart/Flutter开发时,是否也能访问这些事件属性?如果不支持,是否有可行的变通方案?
官方内置支持方案
Flutter 3.3及更高版本已经原生支持触摸压力属性获取,不需要额外做跨端适配:
- 底层自动映射Android的
getPressure接口返回值和iOS的force属性返回值 - 上层可直接通过
PointerEvent类的三个属性读取相关数据:pressure:当前触摸点的压力值pressureMin:当前设备支持的最小压力值pressureMax:当前设备支持的最大压力值
示例代码
import 'package:flutter/material.dart'; void main() => runApp(const PressureDemoApp()); class PressureDemoApp extends StatelessWidget { const PressureDemoApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: Listener( onPointerMove: (PointerEvent event) { debugPrint("当前压力值:${event.pressure.toStringAsFixed(2)}"); }, child: Container( width: 250, height: 250, color: Colors.blue[100], alignment: Alignment.center, child: const Text("按压此处测试压力值"), ), ), ), ), ); } }
注意:无压力感应能力的设备会默认返回pressure为1.0,无需做额外异常处理
低版本Flutter变通方案
如果使用的Flutter版本低于3.3,无法直接读取内置压力属性,可通过两种方案实现:
- 自行通过MethodChannel实现跨端通信:分别在Android端封装
MotionEvent.getPressure调用、iOS端封装UITouch.force读取,将数值回传给Flutter层使用 - 直接集成第三方封装好的触摸压力相关功能库,无需自行实现原生侧逻辑
内容的提问来源于stack exchange,提问作者Marc Van Daele
相关产品推荐
相关产品推荐

