Flutter onTap和onDoubleTap同时存在该怎么办我该如何处理才会出现正常的像是html的正常表现呢?请给出完整代码
在Flutter中,如果同时使用了onTap和onDoubleTap,会出现冲突,因为onDoubleTap会覆盖onTap的事件。为了解决这个问题,可以使用GestureDetector的onTapCancel事件来处理。
以下是一个示例代码,包括了onTap、onDoubleTap和onTapCancel事件的处理:
import 'package:flutter/material.dart';
class MyButton extends StatefulWidget {
final VoidCallback onTap;
final VoidCallback onDoubleTap;
MyButton({this.onTap, this.onDoubleTap});
@override
_MyButtonState createState() => _MyButtonState();
}
class _MyButtonState extends State<MyButton> {
bool _isDoubleTap = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
if (!_isDoubleTap) {
widget.onTap();
}
},
onDoubleTap: () {
setState(() {
_isDoubleTap = true;
});
widget.onDoubleTap();
},
onTapCancel: () {
setState(() {
_isDoubleTap = false;
});
},
child: Container(
width: 100,
height: 50,
color: Colors.blue,
child: Center(
child: Text(
"My Button",
style: TextStyle(color: Colors.white),
),
),
),
);
}
}
class MyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("My Page"),
),
body: Center(
child: MyButton(
onTap: () {
print("onTap");
},
onDoubleTap: () {
print("onDoubleTap");
},
),
),
);
}
}
void main() {
runApp(MaterialApp(
home: MyPage(),
));
}
在这个示例中,当用户单击按钮时,会触发onTap事件。当用户双击按钮时,会触发onDoubleTap事件,并且设置一个标志位_isDoubleTap为true。在onTap事件中,会检查_isDoubleTap的值,如果为true,则表示用户已经双击了按钮,不需要再触发onTap事件。在onTapCancel事件中,会将_isDoubleTap的值重置为false,以便下一次单击事件能够正常触发
原文地址: https://www.cveoy.top/t/topic/cZA8 著作权归作者所有。请勿转载和采集!