|
...
|
...
|
@@ -65,7 +65,9 @@ class ProgressPainter extends CustomPainter { |
|
|
|
var shader = SweepGradient(
|
|
|
|
startAngle: startAngle.toRadians(),
|
|
|
|
endAngle: 360.toRadians(),
|
|
|
|
colors: reverse ? progressColor[colorRangeIndex].reversed.toList() : progressColor[colorRangeIndex],
|
|
|
|
colors: reverse
|
|
|
|
? progressColor[colorRangeIndex].reversed.toList()
|
|
|
|
: progressColor[colorRangeIndex],
|
|
|
|
).createShader(rect);
|
|
|
|
|
|
|
|
var paint = Paint()
|
|
...
|
...
|
@@ -101,7 +103,8 @@ class ProgressPainter extends CustomPainter { |
|
|
|
if (sweepAngle > 360) {
|
|
|
|
rotationAngle = 360 - sweepAngle;
|
|
|
|
}
|
|
|
|
double rotationRadians = reverse ? -rotationAngle.toRadians() : rotationAngle.toRadians();
|
|
|
|
double rotationRadians =
|
|
|
|
reverse ? -rotationAngle.toRadians() : rotationAngle.toRadians();
|
|
|
|
// Rotate the canvas
|
|
|
|
canvas.rotate((-90).toRadians() - rotationRadians);
|
|
|
|
// Move the canvas origin back
|
|
...
|
...
|
@@ -123,7 +126,9 @@ class ProgressPainter extends CustomPainter { |
|
|
|
canvas.drawArc(
|
|
|
|
rect,
|
|
|
|
0.toRadians(),
|
|
|
|
reverse ? -(startAngle + sweepAngle).toRadians() : (startAngle + sweepAngle).toRadians(),
|
|
|
|
reverse
|
|
|
|
? -(startAngle + sweepAngle).toRadians()
|
|
|
|
: (startAngle + sweepAngle).toRadians(),
|
|
|
|
false,
|
|
|
|
paint,
|
|
|
|
);
|
|
...
|
...
|
@@ -141,7 +146,8 @@ class ProgressPainter extends CustomPainter { |
|
|
|
canvas.translate(centerX, centerY);
|
|
|
|
if (sweepAngle < 360) {
|
|
|
|
final endCapRotate = 360 - sweepAngle;
|
|
|
|
canvas.rotate(reverse ? endCapRotate.toRadians() : -endCapRotate.toRadians());
|
|
|
|
canvas.rotate(
|
|
|
|
reverse ? endCapRotate.toRadians() : -endCapRotate.toRadians());
|
|
|
|
}
|
|
|
|
//0.1 is because the angle calculation is not accurate enough, so we need to go back a little bit.
|
|
|
|
var endCapPosition = Offset(
|
|
...
|
...
|
@@ -150,29 +156,19 @@ class ProgressPainter extends CustomPainter { |
|
|
|
);
|
|
|
|
|
|
|
|
canvas.translate(-centerX, -centerY);
|
|
|
|
final endColor = getColorAtAngle(sweepAngle, progressColor[colorRangeIndex]);
|
|
|
|
final endColor =
|
|
|
|
getColorAtAngle(sweepAngle, progressColor[colorRangeIndex]);
|
|
|
|
if (sweepAngle > 355) {
|
|
|
|
//Draw arc shadow
|
|
|
|
var shadowPosition = Offset(
|
|
|
|
centerX + radius * cos((startAngle).toRadians()),
|
|
|
|
centerY + (reverse ? -5 : 5) + radius * sin((startAngle).toRadians()),
|
|
|
|
centerY + (reverse ? -4 : 4) + radius * sin((startAngle).toRadians()),
|
|
|
|
);
|
|
|
|
final Paint shadowPaint = Paint()
|
|
|
|
..color = Colors.black.withOpacity(0.2)
|
|
|
|
..style = PaintingStyle.stroke
|
|
|
|
..strokeWidth = strokeWidth / 2
|
|
|
|
..color = Colors.black.withOpacity(0.35)
|
|
|
|
..style = PaintingStyle.fill
|
|
|
|
..maskFilter = const MaskFilter.blur(BlurStyle.normal, 3);
|
|
|
|
final Path path = Path()
|
|
|
|
..addArc(
|
|
|
|
Rect.fromCenter(
|
|
|
|
center: shadowPosition,
|
|
|
|
width: strokeWidth / 2,
|
|
|
|
height: strokeWidth / 2,
|
|
|
|
),
|
|
|
|
0,
|
|
|
|
reverse ? -pi : pi,
|
|
|
|
);
|
|
|
|
canvas.drawPath(path, shadowPaint);
|
|
|
|
canvas.drawCircle(shadowPosition, strokeWidth / 2, shadowPaint);
|
|
|
|
}
|
|
|
|
|
|
|
|
//Draw the ending arc
|
...
|
...
|
|