微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使孩子在按钮上,如何知道孩子是否被点击?

如何解决即使孩子在按钮上,如何知道孩子是否被点击?

我想创建一个 Widget 来检测用户何时点击它。为此,我使用了带有 GestureGetector 函数onTap 来检测它。 但是,如果子项包含按钮,则​​永远不会调用 onTap 回调。

这是一个例子:

import 'package:Flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      home: MyWidget(
        child: UnkownWidget(),),);
}

class MyWidget extends StatelessWidget {
  const MyWidget({
    @required this.child,});

  final Widget child;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: GestureDetector(
        behavior: HitTestBehavior.translucent,onTap: () {
          print('tapped');
        },child: Container(
          width: 200.0,height: 200.0,color: Colors.blue,child: child,alignment: Alignment.center,);
  }
}

class UnkownWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 150.0,height: 150.0,color: Colors.red,child: TextButton(
        child: Text('Button'),onpressed: () {
          print('Button pressed');
        },);
  }
}

enter image description here

当我点击蓝色的 Container 时,我会在控制台中看到 tapped 但当我点击红色的时,我只看到 Button pressed(没有 tapped ) 但我希望触发两个回调。

我尝试使用 HitTestBehavior.defertochild / HitTestBehavior.translucent / HitTestBehavior.opaque 但它没有改变任何东西。


我还应该指定我对 UnkownWidget 没有任何控制权,因为它可以是任何东西,而且我仍然希望 UnkownWidget 行为正常(仍然通过点击其按钮触发) .


我怎样才能做到这一点?

解决方法

我不认为你可以在 Flutter 中做这样的事情。

但幸运的是,我想到了一个解决方法。那么你可以做的就是在红色容器的onTap函数内部调用蓝色容器的onTap函数。这将模拟一种效果,即当实际上只有红色容器被点击时,两个容器都被点击:

按照此问题获取执行相同操作的解决方案代码:

How do I programmatically simulate onTap on a button in Flutter?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。