paintZigZag function
Draw a line between two points, which cuts diagonally back and forth across the line that connects the two points.
The line will cross the line zigs - 1 times.
If zigs is 1, then this will draw two sides of a triangle from start to
end, with the third point being width away from the line, as measured
perpendicular to that line.
If width is positive, the first zig will be to the left of the start
point when facing the end point. To reverse the zigging polarity, provide
a negative width.
The line is drawn using the provided paint on the provided canvas.
Implementation
void paintZigZag(Canvas canvas, Paint paint, Offset start, Offset end, int zigs, double width) {
  assert(zigs.isFinite);
  assert(zigs > 0);
  canvas.save();
  canvas.translate(start.dx, start.dy);
  end = end - start;
  canvas.rotate(math.atan2(end.dy, end.dx));
  final double length = end.distance;
  final double spacing = length / (zigs * 2.0);
  final Path path = Path()
    ..moveTo(0.0, 0.0);
  for (int index = 0; index < zigs; index += 1) {
    final double x = (index * 2.0 + 1.0) * spacing;
    final double y = width * ((index % 2.0) * 2.0 - 1.0);
    path.lineTo(x, y);
  }
  path.lineTo(length, 0.0);
  canvas.drawPath(path, paint);
  canvas.restore();
}