Flutter:GestureDetector 在其中包含 ListView 时显然不会接收 Drag 事件

foo*_*ist 7 listview nested gesturedetector flutter

我错过了什么吗?文档说事件从最里面的孩子冒泡到祖先,但下面的代码不会打印“拖动”到控制台。不过,它确实打印了“点击”。将 NeverScrollablePhyiscs 应用于 ListView 确实有效,但我想在两个级别上监听事件。将 HitTestBehavior.translucent 应用于 GestureDetector 不会改变任何东西。

import "package:flutter/material.dart";

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: MyHomePage(),
      );
    }
}

class MyHomePage extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: GestureDetector(
          onVerticalDragUpdate: (DragUpdateDetails details) {
            print("dragged");
          },
          onTap: () {
            print("tapped");
          },
          child: ListView.builder(
            itemBuilder: (context, index) {
              return Container(
                padding: EdgeInsets.all(20.0),
                child: Text(
                  "The GestureDetector above me does not react to drag events. Maybe my parent is at fault?"
                )
              );
            },
          )
        )
      );
    }
}
Run Code Online (Sandbox Code Playgroud)

die*_*per 10

您可以使用以下方法侦听原始指针事件 Listener

      return Scaffold(
            body: Listener(onPointerMove: (opm) {
              print("onPointerMove .. ${opm.position}");
        }, child: ListView.builder(
          itemBuilder: (context, index) {
            return Container(
                padding: EdgeInsets.all(20.0),
                child: Text(
                    "The GestureDetector above me does not react to drag events. Maybe my parent is at fault?"));
          },
        )));
Run Code Online (Sandbox Code Playgroud)