我有这段代码,它的作用是在屏幕上触摸时出现一个蓝色圆圈,并跟随我手指的点击/拖动位置。我要达到的目的是,即使同时有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;
}
答案 0 :(得分:0)
您可以使用现成的解决方案(我以前使用过) https://pub.dev/packages/touch_indicator 此外,您还可以检查源代码并获取项目的小部件 https://github.com/Mardaneus86/touch_indicator/blob/master/lib/touch_indicator.dart