GestureDetector 中的 SingleChildScrollView 不起作用

Roo*_*ink 5 dart flutter

当我在 GestureDetector 中使用 ListView 或其他滚动时,它不起作用:

new GestureDetector(
      child: new Container(
        alignment: FractionalOffset.center,
        child: new Text("Short Content"),
        decoration: new BoxDecoration(
          color: Colors.red
        ),
      ),
      onVerticalDragStart: (DragStartDetails detail){
        print("onVerticalDragStart");
      },
      onVerticalDragUpdate: (DragUpdateDetails detail){
        print("onVerticalDragUpdate");
      },
    )
Run Code Online (Sandbox Code Playgroud)

上面它适用于拖动检测,但如果我在 GestureDetector 中有其他滚动,它将不起作用

new GestureDetector(
      child: new Container(
        alignment: FractionalOffset.center,
        child: new ListView(
          children: <Widget>[
            new Text("Long content "),

          ],
        ),
        decoration: new BoxDecoration(
          color: Colors.red
        ),
      ),
      onVerticalDragStart: (DragStartDetails detail){
        print("onVerticalDragStart");
      },
      onVerticalDragUpdate: (DragUpdateDetails detail){
        print("onVerticalDragUpdate");
      },
    )
Run Code Online (Sandbox Code Playgroud)

Alb*_*eña 0

您必须创建一个ScrollController并将其分配给父窗口小部件和子窗口小部件。如果SingleChildScrollView中具有无界约束scrollDirection,则必须添加shrinkWrap: true

例子:

在构建方法之外:

ScrollController scrollController = ScrollController();
Run Code Online (Sandbox Code Playgroud)

在构建方法内部,您可以像这样使用它:

Scaffold(
  body: SingleChildScrollView(
    controller: scrollController,
    child: GestureDetector(
      child: Container(
        alignment: FractionalOffset.center,
        height: MediaQuery.of(context).size.height,
        decoration: const BoxDecoration(color: Colors.red),
        child: ListView(
          controller: scrollController,
          shrinkWrap: true,
          children: const <Widget>[
            Center(child: Text("Long content")),
          ],
        ),
      ),
      onVerticalDragStart: (DragStartDetails detail) {
        print("onVerticalDragStart");
      },
      onVerticalDragUpdate: (DragUpdateDetails detail) {
        print("onVerticalDragUpdate");
      },
    ),
  ),
)
Run Code Online (Sandbox Code Playgroud)

图片:

看法

调试控制台