【问题标题】:Flutter Detect if user is scrollingFlutter 检测用户是否在滚动
【发布时间】:2022-04-07 03:16:25
【问题描述】:

我正在使用ClickableListWheelView,我想向它添加一个通知,以便我可以检查用户何时开始/停止滚动。为此,我在_ClickableListWheelScrollViewStateinit 中尝试了这个:

来自:https://stackoverflow.com/a/63675037/11968226

WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
  scrollCtrl.addListener(() { 
    print('scrolling');
  });
  scrollCtrl.position.isScrollingNotifier.addListener(() { 
    if(!scrollCtrl.position.isScrollingNotifier.value) {
      print('scroll is stopped');
    } else {
      print('scroll is started');
    }
  });
});

但这只是打印“滚动”而不是“停止/开始”。

我不想将视图包裹在 NotificationListener 中。

我在这里错过了什么?

【问题讨论】:

    标签: flutter listview dart scrollcontroller


    【解决方案1】:

    如果您出于某种原因避免使用非常有用的小部件 NotificationListener,那么您可能会发现 this GestureDetector hack 很有用

    它并不完美,但基本上你将正在使用的可滚动小部件(SingleChildScrollViewWrap 等)包装在 GestureDetector 中,并使用它的 onTapDown 来假设用户已经开始滚动,并且onTapUp 假设他们已经停止滚动,并且它适用于大多数情况。

    我没有测试过这段代码,但这里有一个例子可以让你深入了解:

    ClickableListWheelScrollView(
      //...
      child: GestureDetector(
        onTapUp: () {
          print('scrolling has stopped');
        },
        onTapDown: () {
          print('scrolling has started');
        },
        child: ListWheelScrollView.useDelegate(
          //...
        ),
      ),
    )
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多