paintNonUniformBorder static method
- Canvas canvas,
- Rect rect, {
- required BorderRadius? borderRadius,
- required TextDirection? textDirection,
- BoxShape shape = BoxShape.rectangle,
- BorderSide top = BorderSide.none,
- BorderSide right = BorderSide.none,
- BorderSide bottom = BorderSide.none,
- BorderSide left = BorderSide.none,
- required Color color,
Paints a Border with different widths, styles and strokeAligns, on any borderRadius while using a single color.
See also:
- paintBorder, which supports multiple colors but not borderRadius.
- paint, which calls this method.
Implementation
static void paintNonUniformBorder(
Canvas canvas,
Rect rect, {
required BorderRadius? borderRadius,
required TextDirection? textDirection,
BoxShape shape = BoxShape.rectangle,
BorderSide top = BorderSide.none,
BorderSide right = BorderSide.none,
BorderSide bottom = BorderSide.none,
BorderSide left = BorderSide.none,
required Color color,
}) {
final RRect borderRect;
switch (shape) {
case BoxShape.rectangle:
borderRect = (borderRadius ?? BorderRadius.zero)
.resolve(textDirection)
.toRRect(rect);
case BoxShape.circle:
assert(borderRadius == null, 'A borderRadius cannot be given when shape is a BoxShape.circle.');
borderRect = RRect.fromRectAndRadius(
Rect.fromCircle(center: rect.center, radius: rect.shortestSide / 2.0),
Radius.circular(rect.width),
);
}
final Paint paint = Paint()..color = color;
final RRect inner = _deflateRRect(borderRect, EdgeInsets.fromLTRB(left.strokeInset, top.strokeInset, right.strokeInset, bottom.strokeInset));
final RRect outer = _inflateRRect(borderRect, EdgeInsets.fromLTRB(left.strokeOutset, top.strokeOutset, right.strokeOutset, bottom.strokeOutset));
canvas.drawDRRect(outer, inner, paint);
}