问题描述
预期行为
允许多个嵌套手势检测器监听onTap事件的目标。
仅在点击时,代码即可工作。
I/Flutter (18227): inner on tap down kind PointerDeviceKind.touch,local Offset(126.0,177.4) global Offset(126.0,257.5)
I/Flutter (18227): outter on tap down kind PointerDeviceKind.touch,257.5)
问题
但是当您将其拖动到某个位置然后点击任意位置时,就会发生此问题。
I/Flutter (18227): inner on tap down kind PointerDeviceKind.touch,local Offset(188.3,151.9) global Offset(188.3,231.9)
════════ Exception caught by gesture library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown while dispatching a pointer event:
The getter 'position' was called on null.
Receiver: null
Tried calling: position
When the exception was thrown,this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 TapGestureRecognizer.handleTapDown (package:Flutter/src/gestures/tap.dart:493:28)
#2 BaseTapGestureRecognizer._checkDown (package:Flutter/src/gestures/tap.dart:274:5)
#3 BaseTapGestureRecognizer.acceptGesture (package:Flutter/src/gestures/tap.dart:252:7)
#4 AllowMultipleTapGestureRecognizer.rejectGesture (package:ride_app/test/allow_multiple_recognizer.dart:61:5)
...
Event: PointerUpEvent#ff59a(position: Offset(188.3,231.9))
position: Offset(188.3,231.9)
Target: <WidgetsFlutterBinding>
════════════════════════════════════════════════════════════════════════════════════════════════════
可复制的代码(只需复制并粘贴)
import 'package:Flutter/material.dart';
import 'package:Flutter/gestures.dart';
class AllowMultipleRecognizerWidget extends StatefulWidget {
@override
_AllowMultipleRecognizerWidgetState createState() => _AllowMultipleRecognizerWidgetState();
}
class _AllowMultipleRecognizerWidgetState extends State<AllowMultipleRecognizerWidget> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Multiple recognizer'),),body: RawGestureDetector(
gestures: {
AllowMultipleTapGestureRecognizer:
GestureRecognizerFactoryWithHandlers<
AllowMultipleTapGestureRecognizer>(
() => AllowMultipleTapGestureRecognizer(),(AllowMultipleTapGestureRecognizer instance) {
instance.onTapDown = (TapDownDetails event) {
print(
'outter on tap down kind ${event.kind},local ${event.localPosition} global ${event.globalPosition}');
};
},},behavior: HitTestBehavior.defertochild,child:_gestureDetectorInnertest(),);
}
_gestureDetectorInnertest() {
return GestureDetector(
onTapDown: (TapDownDetails event) {
print(
'inner on tap down kind ${event.kind},local ${event.localPosition} global ${event.globalPosition}');
},child: Container(
color: Colors.pink,child: Center(
child: Text('Drag then stop. Now tap anywhere. Check logs for exception'),);
}
}
class AllowMultipleTapGestureRecognizer extends TapGestureRecognizer {
@override
void rejectGesture(int pointer) {
acceptGesture(pointer);
}
}
我在做什么错了?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)