如何在移动滑块时锁定页面滚动

2024-04-15

在 Flutter 中,我有一个应用程序,在自定义 ListView 小部件内有一个自定义滑块。唯一的问题是,当您移动滑块手柄(从左到右)时,由于 ListView,页面仍然会滚动(向上和向下),而我需要页面锁定到位,直到用户停止移动滑块。

我首先查看了材质应用程序滑块代码,但找不到任何有帮助的内容。我还尝试过使用滑块,它具有我想要实现的效果,这告诉我问题出在我的自定义滑块上。 *

我在滑块小部件中使用监听器来检测手势,所以我会假设我在某处丢失了几行? 任何帮助将不胜感激,干杯。

更新: * 我也尝试过改变监听器的行为,但这似乎并没有解决问题。

这是 ListView 中的滑块 - 注意:滑块可以有多个手柄(因此是自定义的),但在本例中仅显示一个手柄以避免混淆。

@override
  Widget build(BuildContext context) {
    return ListView(children: <Widget>[
    Center(
     child: StagedSlider.single(
      value: point,
      //A function which changes the handle value
      onChanged: setHandleInfo,
     ),
    ),
...

这是滑块内的监听器:

return Listener(
      behavior: HitTestBehavior.translucent,
      //The following return functions to calculate handle
      //position/progress...
      onPointerDown: someFunction(),
      onPointerMove: someFunction(),
      onPointerUp: someFunction(),
      //Child is a stack of handles/thumbs calculated higher up
      child: handles,
      ),
    );

举个例子,如果您以垂直向上的方式移动滑块手柄,手柄将沿水平轴移动,整个页面将垂直向下移动。 在另一个手柄上,材质应用程序滑块不会执行此操作,在这种情况下只会移动手柄。

更新2: 因此,对此的快速解决方法是仅使用手势检测器而不是侦听器。我尝试了一下,所有问题似乎都已解决。然而,由于我之前遇到的另一个不相关的问题,如果有人有一个使用监听器的解决方案,那就太好了。


因此,经过一天的工作,我用一块石头打破了两只鸟,并找到了一个解决方案,可以解决这个问题和我之前的帖子here https://stackoverflow.com/q/58182007/12147590

只是想留下一个答案,以防其他人遇到这个问题并遇到类似的问题。

我基本上使用了下面的 RawGestureDetector:

class _MyGestureDetector extends OneSequenceGestureRecognizer {
  final Function onHorizontalDragDown;
  final Function onHorizontalDragUpdate;
  final Function onHorizontalDragUp;

  _SingleDeviceGestureDetector({
    @required this.onHorizontalDragDown,
    @required this.onHorizontalDragUpdate,
    @required this.onHorizontalDragUp,
  });

  @override
  void addPointer(PointerEvent event) {
    //Returns true or false depending on whether there
    //is a pointer on screen already
    if (onHorizontalDragDown(event)) {
      startTrackingPointer(event.pointer);
      resolve(GestureDisposition.accepted);
    } else {
      stopTrackingPointer(event.pointer);
    }
  }

  @override
  void handleEvent(PointerEvent event) {
    //If the pointer is being dragged
    if (event is PointerMoveEvent) {
      //Sends the position of the drag
      onHorizontalDragUpdate(event.position);
    }
    //If the pointer is being lifted
    else if (event is PointerUpEvent) {
      onHorizontalDragUp(event);
      stopTrackingPointer(event.pointer);
    }
  }

  @override
  String get debugDescription => 'singlePointerDrag';

  @override
  void didStopTrackingLastPointer(int pointer) {}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在移动滑块时锁定页面滚动 的相关文章

随机推荐

  • 带有限定符的类型 Set 的依赖关系不满足

    我是创建 Web 服务 Restful api 的新手 遵循 Java Brains for Restful Web 服务的简单教程 我收到错误 内容类似于 带有限定符 Default 的类型集的依赖关系不满足 我在这里搜索了不同的问题 尝
  • 在 Python 中从复杂字符串中检索日期

    我正在尝试使用 datetime strptime 从两个字符串中获取单个日期时间 时间很容易 例如晚上 8 53 所以我可以做类似的事情 theTime datetime strptime givenTime I M p 但是 该字符串不
  • 如何在 PHP 中正确创建 HTML 链接?

    这个问题是关于正确使用原始网址编码 https www php net manual en function rawurlencode php http build query https www php net manual en fun
  • 重置引导模式

    所以 我正在使用 bootstrap 的模态 我想制作一个向导风格的模态并提出以下解决方案 div 片段 div class modal instance hide fade div div div div style display no
  • android:theme="@style/AppTheme"中textAppearance的默认值是textAppearanceSmall吗?

    当我创建一个新的android项目时 默认主题是android Theme Light 我发现TextView控件的字体很小 这是否意味着 android theme style AppTheme 中 textAppearance 的默认值
  • UIMenuController 在 iOS 13.2 中不可见

    我有长按处理程序显示UIMenuController 它在 private func longPressHandler sender UILongPressGestureRecognizer guard sender state began
  • HMM 如何用于手写识别?

    这个问题与传统的手写识别有点不同 我有一个包含数千个以下内容的数据集 对于一个绘制的角色 我有几个连续的 x y 按下笔的坐标 所以 这是一个顺序 时间 问题 我希望能够根据这些数据对手写字符进行分类 并且希望实现 HMM 来实现学习目的
  • Dapper 是否支持在单个查询中插入多行?

    Does StackExchange Dapper https github com StackExchange Dapper支持以下SQL语法吗 INSERT INTO MyTable a b c VALUES 1 2 3 4 5 6 7
  • 在 Visual Studio 2013 中禁用 git

    我有一个由 tfs 管理的存储库 然而在本地 我想通过 git 管理它 并将更改推送到 tfs 一旦我在团队资源管理器中创建 git 存储库 VS2013 就会显示该解决方案仅由 git 管理 如果我尝试编辑任何文件 它会抱怨该文件是只读的
  • 如何通过php按修改日期对文件进行排序

    背景 我有一个匿名登录 ftp 服务器 ftp nlist 仅按字母顺序列出文件 我想根据上次修改日期获取文件列表 最近的在前 我尝试了 ftp exec conn ls t 但出现了 权限被拒绝 错误 不知道为什么它不起作用 好吧 我正在
  • 使用 Plot 的线图重叠

    我有以下用于图表的选项 div div
  • 通过浏览器使用 PDO 将 MySQL 表中的数据存储为 CSV

    我有一个将数据写入 MySQL 数据库的表单 我希望用户能够下载他们的数据CSV最终提交后的格式 我的代码当前正在将数据库的内容转储到浏览器中 即它被写入页面 而不是写入 csv 文件 我想将他们发送到一个链接并提供下载文件的选项 这是我当
  • 从互联网读取数据

    我在网络服务器上有一个包含数据的远程文件夹 我使用以下方式访问数据 myData lt read table http myData csv sep header T 有没有办法对远程文件夹进行密码保护并在上述命令中输入授权 Thx 你可以
  • 使用不受支持的 WebKit 属性会产生什么影响?

    我有兴趣使用 webkit line clamp在混合 iOS 应用程序中 我已阅读苹果文档 https developer apple com library safari documentation AppleApplications
  • 合并时忽略文件/文件夹

    我目前正在使用 SVN 对我的软件项目进行版本控制 在一个正在进行的项目中 我有用于客户通用功能和规范的主干 以及用于客户特定功能和规范的分支 有什么方法可以标记一些文件 文件夹 这些文件 文件夹不应在每次执行此类操作时合并到分支中 我没有
  • Python 在调用之前修饰函数

    我有一个由其他人编写的相当复杂的装饰器 我想做的是根据决定一次调用该函数的修饰版本 或者另一次调用原始函数 未修饰 这可能吗 With decorator original function Without original functio
  • 如果输入等于字符串,则执行某些操作... python 2.7 [重复]

    这个问题在这里已经有答案了 使用以下代码时遇到问题 start over 1 question input Do you wish to try again y n if question y start over 1 else raise
  • 如何使用 xsmtp-api 和 php 库向 SendGrid 中的电子邮件主题添加替换标签

    我正在尝试在电子邮件的主题中设置我的客户的姓名 这对我的申请非常重要 从我在SendGrid API 文档 http sendgrid com docs API Reference SMTP API substitution tags ht
  • 将 JComboBox 放入 JTable 中

    我想将单独的 JComboBox 放入 JTable 的每个单元格中 IE 每个单元格的 JComboBox 内容都不相同 我基本上希望能够调用以下代码来将一行 JComboBox 添加到 JTable 中 有人有什么想法吗 谢谢 JCom
  • 如何在移动滑块时锁定页面滚动

    在 Flutter 中 我有一个应用程序 在自定义 ListView 小部件内有一个自定义滑块 唯一的问题是 当您移动滑块手柄 从左到右 时 由于 ListView 页面仍然会滚动 向上和向下 而我需要页面锁定到位 直到用户停止移动滑块 我