71 lines
1.5 KiB
Dart
71 lines
1.5 KiB
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
|
||
|
|
class DashedLine extends StatelessWidget {
|
||
|
|
final double height;
|
||
|
|
final double width;
|
||
|
|
final Color color;
|
||
|
|
final double strokeWidth;
|
||
|
|
final double dashWidth;
|
||
|
|
final double dashSpace;
|
||
|
|
|
||
|
|
const DashedLine({
|
||
|
|
super.key,
|
||
|
|
this.height = 1,
|
||
|
|
this.width = double.infinity,
|
||
|
|
this.color = Colors.black,
|
||
|
|
this.strokeWidth = 1,
|
||
|
|
this.dashWidth = 5,
|
||
|
|
this.dashSpace = 3,
|
||
|
|
});
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context) {
|
||
|
|
return SizedBox(
|
||
|
|
width: width,
|
||
|
|
height: height,
|
||
|
|
child: CustomPaint(
|
||
|
|
painter: _DashedLinePainter(
|
||
|
|
color: color,
|
||
|
|
strokeWidth: strokeWidth,
|
||
|
|
dashWidth: dashWidth,
|
||
|
|
dashSpace: dashSpace,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
class _DashedLinePainter extends CustomPainter {
|
||
|
|
final Color color;
|
||
|
|
final double strokeWidth;
|
||
|
|
final double dashWidth;
|
||
|
|
final double dashSpace;
|
||
|
|
|
||
|
|
_DashedLinePainter({
|
||
|
|
required this.color,
|
||
|
|
required this.strokeWidth,
|
||
|
|
required this.dashWidth,
|
||
|
|
required this.dashSpace,
|
||
|
|
});
|
||
|
|
|
||
|
|
@override
|
||
|
|
void paint(Canvas canvas, Size size) {
|
||
|
|
double startX = 0;
|
||
|
|
final paint = Paint()
|
||
|
|
..color = color
|
||
|
|
..strokeWidth = strokeWidth;
|
||
|
|
|
||
|
|
while (startX < size.width) {
|
||
|
|
canvas.drawLine(
|
||
|
|
Offset(startX, size.height / 2),
|
||
|
|
Offset(startX + dashWidth, size.height / 2),
|
||
|
|
paint,
|
||
|
|
);
|
||
|
|
startX += dashWidth + dashSpace;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
bool shouldRepaint(CustomPainter oldDelegate) => false;
|
||
|
|
}
|