1

我想检测CustomScrollView我所做的拖动的垂直端是这样的:

GestureDetector(
  onVerticalDragEnd: (details) {}
  child: CustomScrollView(...)
);

但它不起作用,这两个小部件似乎有冲突,我正在寻找解决这个问题的方法

4

1 回答 1

2

使用 aGestureDetector不是正确的方法,这是一种在您停止拖动滚动视图时触发方法的方法:

class MyWidget extends StatelessWidget {
  _onEndScroll(ScrollMetrics metrics) {
    print('Stopped Dragging');
  }
  
  @override
  Widget build(BuildContext context) {
    return NotificationListener<ScrollNotification>(
      onNotification: (scrollNotification) {
        if (scrollNotification is ScrollEndNotification) {
          _onEndScroll(scrollNotification.metrics);
        }
        return false;
      },
      child: SingleChildScrollView(
          child: Column(children: <Widget>[
        ...List<Widget>.generate(
          100,
          (index) => ListTile(title: Text(index.toString())),
        )
      ])),
    );
  }
}

只需将滚动视图包装在一个NotificationListener小部件中,您就可以从滚动视图中获取任何通知,并且您只需要根据通知的类型来管理您的操作。(我false在结束时返回onNotification以继续收听即将到来的通知。)

在 DartPad 上测试完整代码

于 2020-10-06T13:36:24.227 回答