Есть ли способ обнаружить несколько прикосновений к моему экрану во флаттере? - PullRequest
1 голос
/ 02 марта 2020

У меня есть этот кусок кода, и что он делает, когда при касании на экране появляется синий круг и следует за местом касания / перетаскивания моего пальца. Я хочу, чтобы этот синий круг появлялся каждый раз, когда на экране появляется новый палец, даже если есть 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;
}

1 Ответ

0 голосов
/ 02 марта 2020

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

...