在CustomScrollView抖动中检测DragEnd?

问题描述

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

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

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

解决方法

使用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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...