| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import 'package:flutter/material.dart';
- class VerticalDashedLine extends StatelessWidget {
- final double height; // 虚线总高度
- final Color color; // 颜色
- final double strokeWidth; // 线条粗细
- final double dashLength; // 虚线线段长度
- final double dashSpace; // 虚线间隔长度
- const VerticalDashedLine({
- this.height = 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(strokeWidth, height), // 宽度为线条粗细,高度为总高度
- painter: _VerticalDashedLinePainter(
- color: color,
- strokeWidth: strokeWidth,
- dashLength: dashLength,
- dashSpace: dashSpace,
- ),
- );
- }
- }
- class _VerticalDashedLinePainter extends CustomPainter {
- final Color color;
- final double strokeWidth;
- final double dashLength;
- final double dashSpace;
- _VerticalDashedLinePainter({
- 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 startY = 0;
- while (startY < size.height) {
- // 绘制垂直方向的虚线线段
- canvas.drawLine(
- Offset(0, startY), // 起点 (x=0, y=startY)
- Offset(0, startY + dashLength), // 终点 (x=0, y=startY+dashLength)
- paint,
- );
- startY += dashLength + dashSpace;
- }
- }
- @override
- bool shouldRepaint(CustomPainter oldDelegate) => false;
- }
|