Вот мой виджет
child: Scaffold(
body: GestureDetector(
behavior: HitTestBehavior.deferToChild,
onPanUpdate: (DragUpdateDetails details) {
setState(() {
RenderBox box = context.findRenderObject();
pos2 = box.globalToLocal(details.globalPosition);
listPos = List.from(listPos)..add(pos2);
});
},
child: Stack(
children: Widgets<>[
Container(
child: Column(
children: <Widget>[
GestureDetector(
onTap: () {
print('measure');
setState(() {
toMeasure = true;
});
},
child: Icon(
Icons.linear_scale,
color: Colors.white,
),
),
],
),
CustomPaint(
painter: getWidget(listPos, pos1),
child: Container(),
),
),
],
),
)
);
Я пытаюсь переключиться на рисование в области, когда пользователь нажимает значок. Но однажды, когда пользовательская область рисования создается, когда пользователь нажимает на значок, он не обнаруживает никаких нажатий после этого.
Метод getWidget возвращает виджет на основе нажатой иконки. Это один из виджетов. Когда этот виджет возвращается, функции касания больше не работают.
class Draw extends CustomPainter {
List<Offset> listPos;
Offset pos;
Draw(this.listPos, this.pos);
@override
void paint(Canvas canvas, Size size) {
final paint = Paint();
paint.color = Colors.greenAccent;
paint.style = PaintingStyle.stroke;
paint.strokeWidth = 4;
var c = Offset(size.width / 2, size.height / 2);
PointMode pointMode = PointMode.points;
for (var i = 0; i < listPos.length; i++) {
canvas.drawPoints(pointMode, listPos, paint);
}
}
@override
bool shouldRepaint(Draw old) {
return old.listPos != listPos;
}
}