【问题标题】:Gesture Detector Precedence手势检测器优先级
【发布时间】:2021-05-15 18:18:47
【问题描述】:

我有一个堆栈,其中包含一个GestureDetector(它是最上层,跨越整个屏幕)和另一个小部件(在它下面),最终有一个ListView。问题是全局GestureDetector 使用消耗触摸事件的onHorizontalDrag。相反,我希望 ListView 仅使用该事件。

简而言之,有没有办法让ListView 优先于GestureDetector 而无需保持某种状态?请注意,ListView 不是GestureDetector 的子/子-它们位于小部件树中的不同分支上。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我尝试了一个包含两个 GestureDetector 的堆栈。它为堆栈中最后放置的 GestureDetector 提供最高优先级。

    例子:

     @override
      Widget build(BuildContext context) {
        return Stack(
          children: [
            GestureDetector(
              onTap: () => {
                print("gesture detector1 event fired"),
              },
              child: Container(
                color: Colors.red,
                height: 600,
                width: 400,
              ),
            ),
            GestureDetector(
              onTap: () => {
                print("gesture detector2 event fired"),
              },
              child: Container(
                color: Colors.blue,
                height: 200,
                width: 400,
              ),
            ),
          ],
        );
      }
    

    当您点击蓝色容器“手势检测器 2 已启动”时,您点击红色容器然后“手势检测器 1 已启动” Refer this image

    【讨论】:

    • 对我的用例工作得很好。拯救了我的一天:)
    【解决方案2】:

    尝试将behavior: HitTestBehavoir.translucent 或HitTestBehavoir.deferToChild 添加到手势检测器。

    【讨论】:

    • 不,这行不通。同样,GestureDetector 和 ListView 位于不同的小部件分支中,您的建议只有在它们是父/子时才有效
    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2013-01-27
    • 1970-01-01
    • 2019-02-07
    相关资源
    最近更新 更多