dart 如何通过手势传递到下面的对象?

ee7vknir  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(77)

我试图击中最上面的对象后面的一个对象。我试图通过使用GestureDetectorbehavior属性来实现这一点。
代码如下:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new GestureDetector(
      onTap: () => print("Bottom"),
      child: new Container(
        color: Colors.redAccent,
        child: new Center(
          child: new GestureDetector(
            onTap: () => print("Top"),
            behavior: HitTestBehavior.translucent,
            child: new Container(
              width: 200.0,
              height: 200.0,
              color: Colors.blue.withOpacity(0.3),
            ),
          ),
        ),
      ),
    );
  }
}

字符串
不幸的是,这似乎不起作用。只有 * Top * 被打印到控制台。文档使它看起来像是正确的方法,但也许我错过了什么?

l0oc07j2

l0oc07j21#

我希望底部的一个或两个都接收onTap事件tbh。
如果只获取Bottom事件就可以了,那么只需删除:

onTap: () => print("Top"),

字符串
注解掉这行代码后,当我点击内部方块时,它会打印Bottom
使用此版本测试:

Dannys-MacBook:flutter danny$ flutter --version
Flutter 0.4.5-pre.96 • channel master • https://github.com/DanTup/flutter.git
Framework • revision d79f2ee223 (12 hours ago) • 2018-05-26 12:29:53 -0700
Engine • revision 1ed25ca7b7
Tools • Dart 2.0.0-dev.58.0.flutter-f981f09760


也就是说,删除内部的GestureDetector对也是一样的,所以我想知道你添加它的原因是什么?

gkn4icbw

gkn4icbw2#

对于那些需要同时触发两个检测器的人(这样他们就可以同时打印“顶部”和“底部”),你可以尝试使用opaque作为顶部检测器,而不是通常的GestureDetector

return Listener(
  behavior: HitTestBehavior.opaque,
  onPointerUp: (PointerUpEvent event) {
    print('Bottom');
  },
  child: GestureDetector(
    onTap: () {
      print('Top');
    },
    child: Center(
      child: Container(
        height: 100.w,
        width: 100.w,
        color: Colors.red,
      ),
    ),
  ),
);

字符串
编辑:实际上,似乎你甚至可以省略设置behavior,因为translucentopaquedeferToChild都可以工作。

相关问题