dart - Flutter Overlapped InkWells 手势检测

标签 dart flutter gesture detection

在处理应用程序时,我们有一个实例,我们希望卡片上有一个墨水池以及卡片上的一个按钮(也有一个墨水池)。但是,我一直无法确定一种方法来分离手势,以便只调用用户点击下的墨水瓶。就像今天一样,水龙头似乎“流过”到下一个墨水池,从而调用了两种飞溅效果。这是不受欢迎的行为,应用程序似乎在选择卡片而不是卡片上的可调用项(注意:实际应用程序有很大不同,但存在相同的问题)。我在一个简单的应用程序中重现了这一点,以演示当用户按下卡片右下角的按钮时的渗色。我缺少什么可以防止这种行为吗?谢谢

  class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: Card(
        color: Colors.blue,
        child: InkWell(
          onTap: () { },
          child: Container(
            height: 150.0,
            child: Align(
              alignment: Alignment.bottomRight,
              child: RaisedButton(
                color: Colors.red,
                onPressed: () { },
              ),
            ),
          ),
        ),
      ),
    );
  }
}

最佳答案

这是正常预期的 InkWell 行为,因为在大多数情况下,您希望对其树中的每个小部件使用点击功能。所以你可以做的是定义一个 Stack 并在 InkWell 上方的 z 轴绝对值中设置按钮:

Widget build(BuildContext context) {
    return new Scaffold(
        body: Center(
        child: Card(
            color: Colors.blue,
            child: Stack(
            children: <Widget>[
                InkWell(
                    onTap: () {
                        print("inkwell");
                    },
                    child: Container(
                        height: 150.0,
                    ),
                ),
                RaisedButton(
                    color: Colors.red,
                    onPressed: () {
                        print("button");
                    },
                ),
            ],
            ),
        ),
        ),
    );
}

如果你想再次设置右下角的按钮,你可以在它周围设置一个 Row 和 Colum 并指定它的对齐方式:

@override
Widget build(BuildContext context) {
    return new Scaffold(
        body: Center(
            child: Container(
                height: 150.0,
                child: Card(
                color: Colors.blue,
                    child: Stack(
                        children: <Widget>[
                            InkWell(
                                onTap: () {
                                    print("inkwell");
                                },
                                child: Container(
                                    height: 150.0,
                                ),
                            ),
                            Row(
                                mainAxisAlignment: MainAxisAlignment.end,
                                children: <Widget>[
                                    Column(
                                        mainAxisAlignment: MainAxisAlignment.end,
                                        children: <Widget>[
                                        RaisedButton(
                                            color: Colors.red,
                                                onPressed: () {
                                                    print("button");
                                                },
                                            ),
                                        ],
                                    ),
                                ],
                            ),
                        ],
                    ),
                ),
            ),
        ),
    );
}

上面的代码会产生分离的小部件: enter image description here enter image description here

关于dart - Flutter Overlapped InkWells 手势检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51006349/

相关文章:

android - ListView 中的 ListView 不滚动

java - 如何将手势监听器应用于 EditText?

angularjs - 如何在 ionic 谷歌地图中长按/按住时获取坐标值

dart - 对不可为空的变量使用late关键字有什么好处?

flutter - "error: A value of type ' double ' can' t被赋值给类型为'int'的变量”在Flutter中进行数字求和时

android - 如何使用适用于 android 的 flutter google_sign_in 插件在身份 token 过期之前刷新身份 token

android-studio - Android Studio 设备列表卡在正在加载... Mac

android - 在 Kotlin 中实现滑动手势

flutter - 在 flutter 中向上滑动导航到主屏幕

debugging - 为什么在使用 dart :io? 进行单元测试期间进程没有退出