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