我想知道是否可以增加特定窗口小部件的“点击区域”?
一个小例子是50 x 50按钮。如果用户在这50 x 50像素上的任意位置点击,则按钮的onPressed
将被执行。但是,我可以这样做吗,如果用户单击按钮上方5个像素,它的onPressed
仍将执行?
我只是想增加此区域以提供更好的用户体验,而不必增加按钮的实际大小,这会使UI变差。
答案 0 :(得分:9)
我有点迟了,但是您有2个选择。
我面前的答案是非常基本的,仅使用对您无济于事的基本容器。
1)在您的gestureDetector上使用behavior: HitTestBehavior.translucent
,这将允许点击不可见的内容。但是,您想要的不仅仅是设置为可点击的区域,因此请转到选项2。
2)使用不可见的堆栈。在按钮上方堆叠一个容器,使其不可见,并使用正确的HitTestBehaviour在其上添加手势检测,这应该可以正常工作。如果您的按钮是50x50,则将容器设置为55x55,然后将其堆叠在彼此的顶部,然后问题解决。
答案 1 :(得分:1)
您可以将RaisedButton
包装到Container
中,并在Container
上添加一些填充。
然后,您可以将Container
包装到GestureDetector
中,这将使小部件实现多次单击事件。
GestureDetector
还有一个onTap
回调,可用来执行与单击真实RaisedButton
时相同的代码。
这是一个简单的代码示例:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('Stackoverflow example'),
),
body: Center(
child: GestureDetector(
child: Container(
width: 120,
height: 80,
padding: EdgeInsets.all(10),
color: Colors.blueAccent,
child: Center(
child: RaisedButton(
child: Text('Click me'),
onPressed: _fireButtonClick,
),
)
),
onTap: _fireButtonClick
),
),
);
}
现在将RaisedButton
onPressed
代码提取到专用函数中,您可以将其分配给RaisedButton
onPressed
和GestureDetector
onTap
回调:
void _fireButtonClick() {
print('button clicked');
}
希望这对您有帮助,Doobie
答案 2 :(得分:0)
如果将按钮包装在Container
中,将Container
透明化,并放置一个GestureDetection
小部件,然后在按钮onPressed
中编写代码,该怎么办?进入OnTap
小部件的GestureDetector
:
https://api.flutter.dev/flutter/widgets/GestureDetector-class.html