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; } }