Flutter: onTap не срабатывает на детекторе жестов, который находится в верхней части пользовательского виджета рисования - PullRequest
0 голосов
/ 13 февраля 2020

Вот мой виджет

      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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...