void paint(Canvas canvas, Rect rect, { BoxShape shape: BoxShape.rectangle, BorderRadius borderRadius: null })

Paints the border within the given rect on the given canvas.

Source

void paint(Canvas canvas, Rect rect, {
  BoxShape shape: BoxShape.rectangle,
  BorderRadius borderRadius: null
}) {
  if (isUniform) {
    if (borderRadius != null) {
      _paintBorderWithRadius(canvas, rect, borderRadius);
      return;
    }
    if (shape == BoxShape.circle) {
      _paintBorderWithCircle(canvas, rect);
      return;
    }
  }

  assert(borderRadius == null); // TODO(abarth): Support non-uniform rounded borders.
  assert(shape == BoxShape.rectangle); // TODO(ianh): Support non-uniform borders on circles.

  assert(top != null);
  assert(right != null);
  assert(bottom != null);
  assert(left != null);

  Paint paint = new Paint()
    ..strokeWidth = 0.0; // used for hairline borders
  Path path;

  switch (top.style) {
    case BorderStyle.solid:
      paint.color = top.color;
      path = new Path();
      path.moveTo(rect.left, rect.top);
      path.lineTo(rect.right, rect.top);
      if (top.width == 0.0) {
        paint.style = PaintingStyle.stroke;
      } else {
        paint.style = PaintingStyle.fill;
        path.lineTo(rect.right - right.width, rect.top + top.width);
        path.lineTo(rect.left + left.width, rect.top + top.width);
      }
      canvas.drawPath(path, paint);
      break;
    case BorderStyle.none:
      break;
  }

  switch (right.style) {
    case BorderStyle.solid:
      paint.color = right.color;
      path = new Path();
      path.moveTo(rect.right, rect.top);
      path.lineTo(rect.right, rect.bottom);
      if (right.width == 0.0) {
        paint.style = PaintingStyle.stroke;
      } else {
        paint.style = PaintingStyle.fill;
        path.lineTo(rect.right - right.width, rect.bottom - bottom.width);
        path.lineTo(rect.right - right.width, rect.top + top.width);
      }
      canvas.drawPath(path, paint);
      break;
    case BorderStyle.none:
      break;
  }

  switch (bottom.style) {
    case BorderStyle.solid:
      paint.color = bottom.color;
      path = new Path();
      path.moveTo(rect.right, rect.bottom);
      path.lineTo(rect.left, rect.bottom);
      if (bottom.width == 0.0) {
        paint.style = PaintingStyle.stroke;
      } else {
        paint.style = PaintingStyle.fill;
        path.lineTo(rect.left + left.width, rect.bottom - bottom.width);
        path.lineTo(rect.right - right.width, rect.bottom - bottom.width);
      }
      canvas.drawPath(path, paint);
      break;
    case BorderStyle.none:
      break;
  }

  switch (left.style) {
    case BorderStyle.solid:
      paint.color = left.color;
      path = new Path();
      path.moveTo(rect.left, rect.bottom);
      path.lineTo(rect.left, rect.top);
      if (right.width == 0.0) {
        paint.style = PaintingStyle.stroke;
      } else {
        paint.style = PaintingStyle.fill;
        path.lineTo(rect.left + left.width, rect.top + top.width);
        path.lineTo(rect.left + left.width, rect.bottom - bottom.width);
      }
      canvas.drawPath(path, paint);
      break;
    case BorderStyle.none:
      break;
  }
}