Холст со шкалой / панорамированием в виде списка. Как отключить прокрутку - PullRequest
0 голосов
/ 14 января 2019

Извините за мой английский. Спросите, не можете ли вы что-то понять.

Hello! В общем, у меня есть listView, в нем есть один из элементов gestDetector, в котором находится холст. Холст рисует узор.

Мне нужна эта схема для увеличения и "прокрутки". Я уже зарегистрировал саму логику и все работает, но! Если вы начнете перемещаться в области холста вверх или вниз, он не будет перемещать холст, а прокрутит listView. Я гуглил интернет до дыр, но ничего не нашел. Грубо говоря, мне нужно, чтобы, когда пользователь перемещался вверх / вниз в области gestDetector, все события отправлялись туда, а не отправлялись в listView (родительский компонент).

У меня есть такая структура

ListView (
...
    child: GestureDetector(
    ...
       child: ...
             child: CustomPaint(...))
)

Я попытался установить «поведение: HitTestBehavior.translucent» на моем жесте-детекторе, но это не помогло.

1 Ответ

0 голосов
/ 14 января 2019

Вы можете включить / отключить прокрутку вашего ListView, используя свойство физики:

   bool scrollListEnable = true;

      @override
      Widget build(BuildContext context) {
        return Scaffold(
            body: ListView(
          physics: scrollListEnable
              ? AlwaysScrollableScrollPhysics()
              : NeverScrollableScrollPhysics(),
          children: <Widget>[
            Listener(
              onPointerMove: (details) {
                print("onPointerMove : $details");
                if (scrollListEnable) {
                  setState(() {
                    scrollListEnable = false;
                  });
                }
              },
              onPointerUp: (details) {
                print("onPointerUp : $details");
                setState(() {
                  scrollListEnable = true;
                });
              },
              child: Container(
                height: 200.0,
                width: 200.0,
                color: Colors.red,
              ),
            )
          ],
        ));
      }
...