class DashedBorderPainter extends CustomPainter {
final double borderWidth;
final Color borderColor;
final double dashWidth;
final double dashSpace;
DashedBorderPainter({
required this.borderWidth,
required this.borderColor,
required this.dashWidth,
required this.dashSpace,
});
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = borderColor
..style = PaintingStyle.stroke
..strokeWidth = borderWidth;
final dashPath = Path();
double x = 0.0;
while (x < size.width) {
dashPath.moveTo(x, 0);
dashPath.lineTo(x + dashWidth, 0);
x += dashWidth + dashSpace;
}
double y = 0.0;
while (y < size.height) {
dashPath.moveTo(0, y);
dashPath.lineTo(0, y + dashWidth);
y += dashWidth + dashSpace;
}
y = size.height;
while (y > 0) {
dashPath.moveTo(size.width, y);
dashPath.lineTo(size.width, y - dashWidth);
y -= dashWidth + dashSpace;
}
x = size.width;
while (x > 0) {
dashPath.moveTo(x, size.height);
dashPath.lineTo(x - dashWidth, size.height);
x -= dashWidth + dashSpace;
}
canvas.drawPath(dashPath, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return false;
}
}
用法:
DashedBorderContainer(
borderWidth: 0,
borderColor: Color(0xFFDDDDDD),
dashWidth: 5.0,
dashSpace: 3.0,
child: Container(
width: 0,
height: 44,
color: Colors.white,
),
),