flutter 被子对象或父对象阴影的拖动或平移事件

qzwqbdag  于 2022-12-05  发布在  Flutter
关注(0)|答案(2)|浏览(154)

我需要实现一个页面,必须处理不同的手势在小部件树。我已经使用了GestureDetectors,但他们相互遮蔽。我也尝试了SingleChildScrollView,ListView和类似的方法,但拖动或平移事件总是被另一个遮蔽。有没有办法传递这些事件?
下面是一个从不打印“GestureDetector 1”的示例:

GestureDetector(
          onVerticalDragUpdate: (details) {
            print("GestureDetector 1");
          },
          child: GestureDetector(
            onVerticalDragUpdate: (details) {
              print("GestureDetector 2");
            },
            child: Container(
              height: 400,
              width: 600,
              color: Colors.cyanAccent,
            ),
          ),
        )
gcmastyq

gcmastyq1#

过了一段时间,我找到了一种方法。指针事件不是手势,而是冒泡。

Listener(
  onPointerDown: (_){print("Listener 1");},
  child: Listener(
    onPointerDown: (_){print("Listener 2");},
    child: Container(
      width: 100,
      height: 100,
      color: Colors.cyanAccent,
    ),
  ),
)
cvxl0en2

cvxl0en22#

随着更多的经验和实践,我发现这种行为甚至是有用的。

void gd1(){
      print("GestureDetector 1");
    }

    void gd2(){
      print("GestureDetector 2");
    }

    void gd3(){
      print("GestureDetector 3");
    }


    GestureDetector(
      onVerticalDragUpdate: (details) {
        gd1();
      },
      child: GestureDetector(
        onVerticalDragUpdate: (details) {
          if(someCondition()){  // conditional
            gd1();
          }
          gd2();
        },
        child: GestureDetector(
          onVerticalDragUpdate: (details) {
            gd1();  // reordered
            gd3();
            gd2();
          },
          child: Container(
            height: 400,
            width: 600,
            color: Colors.cyanAccent,
          ),
        ),
      ),
    )

相关问题