drawArrowHead method

void drawArrowHead(
  1. Canvas canvas,
  2. Offset point1,
  3. Offset point2,
  4. Paint linePaint,
)

Implementation

void drawArrowHead(
  Canvas canvas,
  Offset point1,
  Offset point2,
  Paint linePaint,
) {
  final deltaX = point2.dx - point1.dx;
  final deltaY = point2.dy - point1.dy;
  final totalDistance = Offset(deltaX, deltaY).distance;
  if (totalDistance == 0) return;
  final unitVectorX = deltaX / totalDistance;
  final unitVectorY = deltaY / totalDistance;
  final rotationAngle = 0.4;

  final arrowPaint = Paint()
    ..color = linePaint.color
    ..style = PaintingStyle.fill;

  final arrowWing1 = Offset(
    point2.dx -
        arrowSize *
            (unitVectorX * calculateCos(rotationAngle) +
                unitVectorY * calculateSin(rotationAngle)),
    point2.dy -
        arrowSize *
            (unitVectorY * calculateCos(rotationAngle) -
                unitVectorX * calculateSin(rotationAngle)),
  );
  final arrowWing2 = Offset(
    point2.dx -
        arrowSize *
            (unitVectorX * calculateCos(rotationAngle) -
                unitVectorY * calculateSin(rotationAngle)),
    point2.dy -
        arrowSize *
            (unitVectorY * calculateCos(rotationAngle) +
                unitVectorX * calculateSin(rotationAngle)),
  );

  final arrowPath = Path()
    ..moveTo(point2.dx, point2.dy)
    ..lineTo(arrowWing1.dx, arrowWing1.dy)
    ..lineTo(arrowWing2.dx, arrowWing2.dy)
    ..close();

  canvas.drawPath(arrowPath, arrowPaint);
}