drawDashedLine method

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

Implementation

void drawDashedLine(
  Canvas canvas,
  Offset point1,
  Offset point2,
  Paint linePaint,
) {
  final patternArray = dashPattern!;
  final deltaX = point2.dx - point1.dx;
  final deltaY = point2.dy - point1.dy;
  final totalDistance = Offset(deltaX, deltaY).distance;
  final unitVectorX = deltaX / totalDistance;
  final unitVectorY = deltaY / totalDistance;
  double accumulatedDistance = 0;
  int patternIndex = 0;
  bool isDrawingSegment = true;
  while (accumulatedDistance < totalDistance) {
    final currentSegmentLength =
        patternArray[patternIndex % patternArray.length];
    final endDistance = (accumulatedDistance + currentSegmentLength).clamp(
      0,
      totalDistance,
    );
    final segmentStart = Offset(
      point1.dx + unitVectorX * accumulatedDistance,
      point1.dy + unitVectorY * accumulatedDistance,
    );
    final segmentEnd = Offset(
      point1.dx + unitVectorX * endDistance,
      point1.dy + unitVectorY * endDistance,
    );
    if (isDrawingSegment)
      canvas.drawLine(segmentStart, segmentEnd, linePaint);
    accumulatedDistance += currentSegmentLength;
    patternIndex++;
    isDrawingSegment = !isDrawingSegment;
  }
}