void paint()

in packages/diagrams/lib/src/utils.dart [89:145]


  void paint(Canvas canvas, Size size) {
    final RenderBox hero =
        heroKey.currentContext!.findRenderObject()! as RenderBox;
    final RenderBox diagram =
        canvasKey.currentContext!.findRenderObject()! as RenderBox;
    final Paint dotPaint = Paint();
    final Paint linePaint = Paint()..strokeWidth = 2.0;
    final Offset heroTopLeft =
        diagram.globalToLocal(hero.localToGlobal(Offset.zero));
    for (final Label label in labels) {
      final RenderBox box =
          label.key.currentContext!.findRenderObject()! as RenderBox;
      final Offset anchor = diagram
          .globalToLocal(box.localToGlobal(label.anchor.alongSize(box.size)));
      final Offset anchorOnHero = anchor - heroTopLeft;
      final FractionalOffset relativeAnchor =
          FractionalOffset.fromOffsetAndSize(anchorOnHero, hero.size);
      final double distanceToTop = anchorOnHero.dy;
      final double distanceToBottom = hero.size.height - anchorOnHero.dy;
      final double distanceToLeft = anchorOnHero.dx;
      final double distanceToRight = hero.size.width - anchorOnHero.dx;
      Offset labelPosition;
      Offset textPosition = Offset.zero;
      final TextPainter painter = _painters[label]!;
      if (distanceToTop <= distanceToLeft &&
          distanceToTop <= distanceToRight &&
          distanceToTop <= distanceToBottom) {
        labelPosition = Offset(anchor.dx + (relativeAnchor.dx - 0.5) * margin,
            heroTopLeft.dy - margin);
        textPosition = Offset(labelPosition.dx - painter.width / 2.0,
            labelPosition.dy - painter.height);
      } else if (distanceToBottom < distanceToLeft &&
          distanceToBottom < distanceToRight &&
          distanceToTop > distanceToBottom) {
        labelPosition =
            Offset(anchor.dx, heroTopLeft.dy + hero.size.height + margin);
        textPosition =
            Offset(labelPosition.dx - painter.width / 2.0, labelPosition.dy);
      } else if (distanceToLeft < distanceToRight) {
        labelPosition = Offset(heroTopLeft.dx - margin, anchor.dy);
        textPosition = Offset(labelPosition.dx - painter.width - 2.0,
            labelPosition.dy - painter.height / 2.0);
      } else if (distanceToLeft > distanceToRight) {
        labelPosition =
            Offset(heroTopLeft.dx + hero.size.width + margin, anchor.dy);
        textPosition =
            Offset(labelPosition.dx, labelPosition.dy - painter.height / 2.0);
      } else {
        labelPosition = Offset(anchor.dx, heroTopLeft.dy - margin * 2.0);
        textPosition = Offset(anchor.dx - painter.width / 2.0,
            anchor.dy - margin - painter.height);
      }
      canvas.drawCircle(anchor, 4.0, dotPaint);
      canvas.drawLine(anchor, labelPosition, linePaint);
      painter.paint(canvas, textPosition);
    }
  }