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

问题描述

我想创建一个 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?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...