在CustomScrollView抖动中检测DragEnd?

时间:2020-10-06 12:49:23

标签: flutter gesturedetector customscrollview

我想检测CustomScrollView的垂直拖动结束,是这样的:

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

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

1 个答案:

答案 0 :(得分:1)

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

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,以继续收听即将到来的通知。)

Test the full code on DartPad