Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在小部件后面单击_Flutter_Dart_Canvas_Gesturedetector_Propagation - Fatal编程技术网

Flutter 在小部件后面单击

Flutter 在小部件后面单击,flutter,dart,canvas,gesturedetector,propagation,Flutter,Dart,Canvas,Gesturedetector,Propagation,我有一个堆栈,里面有两个小部件。 我试图检测堆栈底部小部件的点击,它位于顶部小部件的后面 我使用的是HitTestBehavior.transparcent,但它仅在gesturedector没有任何子对象时才起作用 这是我在应用程序中所需内容的简化版本。我有一个堆栈,在屏幕上有许多小卡片,上面有一张画布。尽管有画布,但我需要能够点击卡片来更改其内容。我原以为使用半透明的行为可以解决我的问题,但事实并非如此 编辑:此外,第一个手势检测器将始终位于定位的小部件中 class TestPage扩展了

我有一个堆栈,里面有两个小部件。 我试图检测堆栈底部小部件的点击,它位于顶部小部件的后面

我使用的是
HitTestBehavior.transparcent
,但它仅在
gesturedector
没有任何子对象时才起作用

这是我在应用程序中所需内容的简化版本。我有一个堆栈,在屏幕上有许多小卡片,上面有一张画布。尽管有画布,但我需要能够点击卡片来更改其内容。我原以为使用半透明的行为可以解决我的问题,但事实并非如此

编辑:此外,第一个
手势检测器将始终位于
定位的
小部件中

class TestPage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:大小盒子(
身高:800,
宽度:400,
子:堆栈(
儿童:[
///2…并触发此小部件的onTap功能
手势检测器(
行为:HitTestBehavior.不透明,
onTap:(){
打印(“点击底部”);
},
子:容器(
身高:500,
宽度:400,
颜色:颜色。深橙色,
),
),
///1.我想在这里停下来。。。
手势检测器(
行为:HitTestBehavior.transparent,
onTap:null,
子:容器(
身高:300,
宽度:400,
颜色:颜色。深紫色,
),
),
],
),
),
// ),
),
);
}
}

VrajGohil就这个问题给出了答案:

以下是他的解决方案:

class TestPage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:大小盒子(
身高:800,
宽度:400,
子:堆栈(
儿童:[
///2…并触发此小部件(小部件_2)的onTap功能
手势检测器(
行为:HitTestBehavior.不透明,
onTap:(){
打印(“点击底部”);
},
子:容器(
身高:500,
宽度:400,
颜色:颜色。深橙色,
),
),
///能触底
无知者(
是的,
子:容器(
身高:300,
宽度:400,
颜色:颜色。深紫色,
),
),
],
),
),
),
);
}
}

我有一个示例代码,您可以使用它来实现:

​class TestPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: SizedBox(
          height: 800,
          width: 400,
          child: Stack(
            children: [
              /// 2. ... and trigger the onTap function of this widget (WIDGET_2)
              GestureDetector(
                behavior: HitTestBehavior.opaque,
                onTap: () {
                  print('TAP BOTTOM');
                },
                child: Container(
                  height: 500,
                  width: 400,
                  color: Colors.deepOrange,
                ),
              ),
              /// Able to tap bottom
              IgnorePointer(
                ignoring: true,
                child: Container(
                  height: 300,
                  width: 400,
                  color: Colors.deepPurple,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
也很抱歉在这里发布的太晚