Есть ли способ обнаружить несколько касаний экрана при трепете?

У меня есть этот фрагмент кода, и он делает то, что при касании экрана появляется синий кружок, который следует за местом касания / перетаскивания моего пальца. Я хочу добиться, чтобы этот синий круг появлялся каждый раз, когда на экране появляется новый палец, даже если одновременно происходит 2 или 3 касания. Пожалуйста, помогите мне, я полностью застрял. Я пытался добавить более одного события onpointerdown, но это плохая идея.

class SecondScreen extends StatefulWidget {
  @override
  State createState() => new SecondScreenState();
}


class SecondScreenState extends State<SecondScreen> {
  GlobalKey _paintKey = new GlobalKey();
  Offset _offset;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          centerTitle: true,
          title: new Text('Choosing..',
            style: TextStyle(
                fontSize: 50,
                color: Colors.white
            ),
          ),
        ),
        body:
            GestureDetector(

                child: Listener(

                    onPointerMove: (PointerMoveEvent event) {
                      RenderBox referenceBox = _paintKey.currentContext
                          .findRenderObject();
                      Offset offset = referenceBox.globalToLocal(
                          event.position);
                      setState(() {
                        _offset = offset;
                      });
                    },

                    onPointerDown: (PointerDownEvent event) {

                    },


                    onPointerUp: (PointerUpEvent event) {
                      setState(() {
                        _offset = null;
                      });
                    },

                    child: new CustomPaint(
                      key: _paintKey,
                      painter: new MyCustomPainter(_offset),
                      child: new ConstrainedBox(
                        constraints: new BoxConstraints.expand(),
                      )
                      ,
                    )
                )
    )
    );



  }
}

class MyCustomPainter extends CustomPainter {
  final Offset _offset;
  MyCustomPainter(this._offset);

  @override
  void paint(Canvas canvas, Size size) {
    if (_offset == null) return;
    canvas.drawCircle(_offset, 100.0, new Paint()..color = Colors.blue);
  }

  @override
  bool shouldRepaint(MyCustomPainter other) => other._offset != _offset;
}

person Antreas Zeniou    schedule 01.03.2020    source источник
comment
Отвечает ли это на ваш вопрос? Обработка мультитач во флаттере   -  person GJ Nilsen    schedule 02.03.2020
comment
проверить PointerEvent.pointer свойство   -  person pskink    schedule 02.03.2020


Ответы (1)


Вы можете использовать готовое решение (я использовал его ранее) https://pub.dev/packages/touch_indicator А также вы можете проверить исходный код и загрузить виджет в свой проект https://github.com/Mardaneus86/touch_indicator/blob/master/lib/touch_indicator.dart

person Yauhen Sampir    schedule 01.03.2020