cargo66/lib/presentation/widgets/circle_painter.dart

128 lines
2.9 KiB
Dart
Raw Normal View History

2024-08-30 11:07:22 +00:00
import 'package:flutter/material.dart';
class CirclePainter extends CustomPainter {
final double radius;
final Color color;
CirclePainter({required this.radius, required this.color});
@override
void paint(Canvas canvas, Size size) {
// Create a paint object with the specified color
final paint = Paint()
..color = color
..style = PaintingStyle.fill;
// Draw the circle in the center of the canvas
canvas.drawCircle(
Offset(size.width / 2, size.height / 2),
radius,
paint,
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}
class CirclePainterWidget extends StatelessWidget {
final double radius;
final Color color;
const CirclePainterWidget({super.key, required this.radius, required this.color});
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: CirclePainter(radius: radius, color: color),
// Ensure the widget is large enough to fit the circle
size: Size(radius * 2, radius * 2),
);
}
}
2024-08-30 11:23:43 +00:00
class CircleWithGapPainter extends CustomPainter {
final double radius;
final Color fillColor;
final Color borderColor;
final double borderWidth;
final double gap;
CircleWithGapPainter({
required this.radius,
required this.fillColor,
required this.borderColor,
required this.borderWidth,
required this.gap,
});
@override
void paint(Canvas canvas, Size size) {
// Paint for the inner circle
final fillPaint = Paint()
..color = fillColor
..style = PaintingStyle.fill;
// Paint for the border
final borderPaint = Paint()
..color = borderColor
..style = PaintingStyle.stroke
..strokeWidth = borderWidth;
// Draw the filled inner circle
canvas.drawCircle(
Offset(size.width / 2, size.height / 2),
radius,
fillPaint,
);
// Draw the border circle with the gap
canvas.drawCircle(
Offset(size.width / 2, size.height / 2),
radius + gap + borderWidth / 2,
borderPaint,
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}
class CircleWithGapWidget extends StatelessWidget {
final double radius;
final Color fillColor;
final Color borderColor;
final double borderWidth;
final double gap;
const CircleWithGapWidget({
super.key,
required this.radius,
required this.fillColor,
required this.borderColor,
required this.borderWidth,
required this.gap,
});
@override
Widget build(BuildContext context) {
// Ensure the widget is large enough to fit the circle with its border and gap
double totalSize = (radius + gap + borderWidth) * 2;
return CustomPaint(
painter: CircleWithGapPainter(
radius: radius,
fillColor: fillColor,
borderColor: borderColor,
borderWidth: borderWidth,
gap: gap,
),
size: Size(totalSize, totalSize),
);
}
}