flutter的GestureDetector 点击区域小

使用GestureDetector包裹Container,发现在Container内容为空的区域点击时,捕捉不到onTap点击事件。

解决方案:在GestureDetector里面添加属性:behavior: HitTestBehavior.opaque,即可:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: Center(
          child: GestureDetector(
            behavior: HitTestBehavior.opaque,
            onTap: (){
              print("hehe");
            },
            child: Padding(
                padding: EdgeInsets.only(left: 150.0,top: 150.0),
                child: Text('Hello World')),

          ),
        ),
      ),
    );
  }
}

解决方式是添加:behavior: HitTestBehavior.opaque,属性,可以让点击事件透过这个Text的区域。如果不添加这个属性,那么只能点击到文字时才会有响应。如下图所示:

Flutter中,模拟右键点击并显示一个菜单通常不是通过模拟鼠标事件来实现的,因为Flutter是为移动平台设计的,原生并不支持鼠标事件。在移动设备上,你通常不会有一个鼠标,而是使用触摸操作。不过,Flutter确实提供了长按(LongPress)事件,可以用来模拟右键点击的行为。 为了实现长按触发菜单的效果,你可以使用`GestureDetector`或者`LongPressDownCallback`来检测用户的长按操作。然后,使用`showMenu`方法来显示自定义的菜单。以下是一个简单的示例代码: ```dart import 'package:flutter/material.dart'; class ContextMenuExample extends StatefulWidget { @override _ContextMenuExampleState createState() => _ContextMenuExampleState(); } class _ContextMenuExampleState extends State<ContextMenuExample> { void _showContextMenu(BuildContext context, Offset offset) { showMenu( context: context, position: RelativeRect.fromLTRB( offset.dx, offset.dy, 0, 0, ), items: [ PopupMenuItem( child: Text('复制'), ), PopupMenuItem( child: Text('粘贴'), ), PopupMenuItem( child: Text('设置'), ), ], ); } @override Widget build(BuildContext context) { return GestureDetector( onLongPress: () { final RenderBox overlay = Overlay.of(context).context.findRenderObject(); final Offset position = overlay.globalToLocal(Offset.zero); _showContextMenu(context, position); }, child: Container( width: 200, height: 200, color: Colors.blue, child: Center( child: Text( '长按这里', style: TextStyle(color: Colors.white), ), ), ), ); } } ``` 这段代码创建了一个可以长按的区域,当长按时,会显示一个简单的菜单。`_showContextMenu`函数负责显示菜单,而`onLongPress`回调在用户长按时被触发。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值