0

这是我的小部件

      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;
  }
}
4

0 回答 0