GestureDetector¶
可以响应点击
onTap:没有参数的回调
正常点击:onTapDown --> onTapUp --> onTap
点击后滑动:onTapDown --> onTapCancel
import 'package:flutter/material.dart';
class _GestureDetectorExampleState extends State<GestureDetectorExample> {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: (TapDownDetails details) {
print(
"onTapDown---${details.globalPosition}---${details.localPosition}");
},
onTapUp: (details) {
print("onTapUp---${details.globalPosition}---${details.localPosition}");
},
onTap: () {
print("onTap");
},
onTapCancel: () {
print("onTapCancel");
},
child: Container(
width: 200,
height: 200,
color: Colors.orange,
alignment: Alignment.center,
child: const Text(
"手势",
style: TextStyle(color: Colors.white, fontSize: 30),
),
),
);
}
}
扩大GestureDetector
的点击范围¶
- 使用
Padding
: 在GestureDetector
外部包裹一个Padding
小部件来增加可点击的区域。
Padding(
padding: EdgeInsets.all(20.0), // 扩大20像素的点击范围
child: GestureDetector(
onTap: () {
print('Tap!');
},
child: Container(
// ...
),
),
)
- 使用
Container
并设置margin
: 给GestureDetector
的子Container
设置margin
属性,这样点击区域也会相应增大。
GestureDetector(
onTap: () {
print('Tap!');
},
child: Container(
margin: EdgeInsets.all(20.0), // 扩大20像素的点击范围
// ...
),
)
- 使用
SizedBox
或Container
设置大小: 如果想要确保GestureDetector
有一个最小的点击区域,可以使用SizedBox
或者给Container
设置一个width
和height
。
GestureDetector(
onTap: () {
print('Tap!');
},
child: Container(
width: 100,
height: 100,
// ...
),
)
- 使用
HitTestBehavior
: 如果你的GestureDetector
是透明的或者没有子小部件占据空间,你可以通过设置behavior
属性来确保它可以接收点击事件。
GestureDetector(
behavior: HitTestBehavior.opaque, // 现在整个GestureDetector都可以点击
onTap: () {
print('Tap!');
},
child: Container(
// 甚至可以没有尺寸
),
)