【发布时间】:2020-07-02 18:35:20
【问题描述】:
如果两个容器在堆栈中完全重叠,那么当点击顶部的小部件时,我们如何检测底部的onTap() 事件?
用例:
我的顶部容器是透明的。我正在使用这个透明的容器水龙头为顶部小部件设置动画(这个顶部小部件粘在屏幕底部)。在点击时,我想在位置为相同的底部元素设置动画。
另外,我实现了自定义 Rawgesture,但我没有看到手势领域冲突。仅当元素的位置使得一个是父级而第二个是子级时,才会检测到这种竞技场冲突。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Stack(children: <Widget>[
GestureDetector(
onTap: () {
print('green clicked.');
},
child: Container(
color: Colors.green,
width: 400,
height: 400,
),
),
GestureDetector(
onTap: () {
print('red clicked.');
},
child: Container(
color: Colors.red,
width: 200,
height: 200,
),
),
]),
);
}
}
在上面的示例中,当我单击红色容器时,它将打印red clicked,但也存在绿色容器的某些部分。我想知道这两个事件是否都可以调用?
谢谢。
【问题讨论】:
-
尝试更改顶部小部件的 hitTestBehavior
-
@Pavel 那是我做的第一件事。但是没有用。
-
如果要按下底部容器项,则必须将上部容器颜色设置为透明。有时取决于,例如上部容器包含文本,而下部容器包含一些图像,而不是您只能在文本字体区域上按下文本(如果有任何事件),除此之外,您可以获得下部图像的事件如果您保持文本的背景颜色透明,则事件。
-
@SanketVekariya 我的顶部容器是透明的。我正在使用这个透明的容器水龙头来为顶部小部件设置动画。同样在点击时,我想为相同的底部元素设置动画。我还实现了自定义 Rawgesture,但我没有看到手势竞技场冲突,所以无法弄清楚发生了什么。我已经做了解决方法,但想知道它是否可能。
-
您能与我们分享一个“可运行代码”示例吗?了解更多关于 的信息,以便我们提供帮助