如何解决getter的“ position”在null上被调用在TapGestureRecognizer.handleTapDown中包:flutter / src / gestures / tap.dart:493:28
预期行为
允许多个嵌套手势检测器监听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);
}
}
如您所见,tap监听器的外部输出此错误。
我在做什么错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。