Во 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,
),
);
В качестве примера: если вы перемещаете ручку ползунка в вертикальном движении вверх, ручка будет двигаться по горизонтальной оси, а вся страница будет двигаться вниз по вертикали. С другой стороны, Material App Slider не делает этого, и в этом случае он будет только перемещать ручку.
Update2: Таким образом, быстрое решение этой проблемы - просто использовать детектор жестов вместо слушателя. Я попробовал это, и все проблемы, казалось, были решены. Тем не менее, из-за другой не связанной с этим проблемы, которая возникла у меня ранее, если бы у кого-то было решение с использованием Слушателя, это было бы замечательно.