作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 onForcePress 属性,例如onForcePressStart
, onForcePressUpdate
GestureDetector
等Flutter 中的小部件,但是当我触摸屏幕时,它们不会触发回调(尽可能轻巧或尽可能用力)。我之前用 onPanStart
实现了我原本相同的代码, onPanUpdate
等等,它按预期工作,只是无法访问我想要的压力信息。
似乎没有调用 GestureForcePress 回调的最小工作示例:
import 'package:flutter/material.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
print('onTap triggered');
},
// onPanStart: (details) {
// print('onPanStart triggered with ' + details.toString());
// },
// onPanUpdate: (details) {
// print('onPanUpdate triggered with ' + details.toString());
// },
onForcePressStart: (details) {
print('onForcePressStart triggered with ' + details.toString());
},
onForcePressUpdate: (details) {
print('onForcePressUpdate triggered with ' + details.toString());
},
child: Container(
color: Colors.red,
),
);
}
}
我知道如果压力小于
startPressure
它们不应该触发,对于
GestureDetector
,默认情况下是 0.4,在 0 到 1 的范围内小部件。 (我也想知道如何编辑这个
startPressure
属性,但会作为一个单独的问题提出来。)
最佳答案
追根溯源到addAllowedPointer(PointerEvent event)
force_press.dart 中的方法,它开始
@override
void addAllowedPointer(PointerEvent event) {
// If the device has a maximum pressure of less than or equal to 1, it
// doesn't have touch pressure sensing capabilities. Do not participate
// in the gesture arena.
if (event is! PointerUpEvent && event.pressureMax <= 1.0) {
resolve(GestureDisposition.rejected);
} else {
// code for adding ForcePress pointer
}
声明没有压力感应功能的设备的最大压力 <= 1 的评论是不正确的,我的压力感应设备的最大压力为 1.0(通过检查 PointerDataPackets 发现,在调试时压力首先出现在堆栈中)。
@override
void addAllowedPointer(PointerEvent event) {
// If the device has a maximum pressure of less than or equal to 1, it
// doesn't have touch pressure sensing capabilities. Do not participate
// in the gesture arena.
if (event is! PointerUpEvent && event.pressureMax == event.pressureMin) {
resolve(GestureDisposition.rejected);
} else {
// code for adding ForcePress pointer
}
正如 PointerEvent 文档中所述,没有压力感应功能的设备应该有
pressureMin = 1.0和
pressureMax = 1.0 ,并且具有压力传感功能且压力最小 = 1.0、压力最大 = 1.0 的设备与在我能想到的所有用例中都没有的设备无法区分,所以这对我来说很有意义。
关于flutter - 如何使用 GestureDetector 的 onForcePress 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63545774/
我正在尝试使用 onForcePress 属性,例如onForcePressStart , onForcePressUpdate GestureDetector 等Flutter 中的小部件,但是当我
我是一名优秀的程序员,十分优秀!