有什么方法可以检测到我的屏幕在颤振中有多处触摸?

时间:2020-03-01 21:53:49

标签: flutter listener tap gesturedetector

我有这段代码,它的作用是在屏幕上触摸时出现一个蓝色圆圈,并跟随我手指的点击/拖动位置。我要达到的目的是,即使同时有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 :(得分:0)

您可以使用现成的解决方案(我以前使用过) https://pub.dev/packages/touch_indicator 此外,您还可以检查源代码并获取项目的小部件 https://github.com/Mardaneus86/touch_indicator/blob/master/lib/touch_indicator.dart