| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import 'package:flutter/material.dart';
- class HorizontalDashedLine extends StatelessWidget {
- final double width; // 总宽度
- final Color color; // 颜色
- final double strokeWidth; // 线条粗细
- final double dashLength; // 每段虚线长度
- final double dashSpace; // 间隔长度
- const HorizontalDashedLine({
- this.width = 100,
- this.color = Colors.grey,
- this.strokeWidth = 1,
- this.dashLength = 5,
- this.dashSpace = 3,
- super.key,
- });
- @override
- Widget build(BuildContext context) {
- return CustomPaint(
- size: Size(width, strokeWidth), // 高度设为 strokeWidth,宽度根据传参变化
- painter: _HorizontalDashedLinePainter(
- color: color,
- strokeWidth: strokeWidth,
- dashLength: dashLength,
- dashSpace: dashSpace,
- ),
- );
- }
- }
- class _HorizontalDashedLinePainter extends CustomPainter {
- final Color color;
- final double strokeWidth;
- final double dashLength;
- final double dashSpace;
- _HorizontalDashedLinePainter({
- required this.color,
- required this.strokeWidth,
- required this.dashLength,
- required this.dashSpace,
- });
- @override
- void paint(Canvas canvas, Size size) {
- final paint = Paint()
- ..color = color
- ..strokeWidth = strokeWidth
- ..style = PaintingStyle.stroke;
- double startX = 0;
- double centerY = size.height / 2; // 让虚线在垂直方向居中
- while (startX < size.width) {
- canvas.drawLine(
- Offset(startX, centerY),
- Offset(startX + dashLength, centerY),
- paint,
- );
- startX += dashLength + dashSpace;
- }
- }
- @override
- bool shouldRepaint(covariant _HorizontalDashedLinePainter oldDelegate) {
- return oldDelegate.color != color ||
- oldDelegate.strokeWidth != strokeWidth ||
- oldDelegate.dashLength != dashLength ||
- oldDelegate.dashSpace != dashSpace;
- }
- }
|