Conflicts: lib/main.dart lib/retrofit/data/member_rank.dart lib/retrofit/data/store_info.dart lib/retrofit/data/task.dartnull_safety
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 332 B |
After Width: | Height: | Size: 630 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 542 B |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 186 B |
After Width: | Height: | Size: 178 KiB |
@ -0,0 +1,146 @@
|
||||
/* |
||||
* 如果只有一个圆的情况下,请设置已完成的圆 默认的圆的颜色不要设置 |
||||
*/ |
||||
import 'dart:math'; |
||||
|
||||
import 'package:flutter/cupertino.dart'; |
||||
|
||||
class MyPainter extends CustomPainter { |
||||
//默认的线的背景颜色 |
||||
Color lineColor; |
||||
//默认的线的宽度 |
||||
double width; |
||||
//已完成线的颜色 |
||||
Color completeColor; |
||||
//已完成的百分比 |
||||
double completePercent; |
||||
//已完成的线的宽度 |
||||
double completeWidth; |
||||
// 从哪开始 1从下开始, 2 从上开始 3 从左开始 4 从右开始 默认从下开始 |
||||
double startType; |
||||
//是不是虚线的圈 |
||||
bool isDividerRound; |
||||
//中间的实圆 统计线条是不是渐变的圆 |
||||
bool isGradient; |
||||
//结束的位置 |
||||
double endAngle; |
||||
//默认的线的背景颜色 |
||||
List<Color> lineColors; |
||||
//实心圆阴影颜色 |
||||
// Color shadowColor; |
||||
//渐变圆 深色在下面 还是在左面 默认在下面 |
||||
bool isTransfrom; |
||||
|
||||
MyPainter({ |
||||
this.lineColor, |
||||
this.completeColor, |
||||
this.completePercent, |
||||
this.width, |
||||
this.completeWidth = 0, |
||||
this.startType = 1, |
||||
this.isDividerRound = false, |
||||
this.isGradient = false, |
||||
this.endAngle = pi * 2, |
||||
this.lineColors, |
||||
this.isTransfrom = false, |
||||
// this.shadowColor, |
||||
}); |
||||
|
||||
@override |
||||
void paint(Canvas canvas, Size size) { |
||||
Offset center = Offset(size.width / 2, size.height / 2); // 坐标中心 |
||||
double radius = min(size.width / 2, size.height / 2); // 半径 |
||||
|
||||
//是否有第二层圆 |
||||
if (lineColor != null) { |
||||
//是不是 虚线圆 |
||||
if (isDividerRound) { |
||||
//背景的线 |
||||
Paint line = Paint() |
||||
..color = lineColor |
||||
// ..strokeCap = StrokeCap.round |
||||
..style = PaintingStyle.stroke |
||||
..isAntiAlias = true |
||||
..strokeWidth = width; |
||||
|
||||
double i = 0.00; |
||||
while (i < pi * 2) { |
||||
canvas.drawArc(Rect.fromCircle(center: center, radius: radius), i, |
||||
0.15, false, line); |
||||
i = i + 0.3; |
||||
} |
||||
} else { |
||||
//背景的线 实线 |
||||
Paint line = Paint() |
||||
..color = lineColor |
||||
..strokeCap = StrokeCap.round |
||||
..style = PaintingStyle.stroke |
||||
..strokeWidth = width; |
||||
|
||||
canvas.drawCircle( |
||||
// 画圆方法 |
||||
center, |
||||
radius, |
||||
line); |
||||
} |
||||
} |
||||
//画上面的圆 |
||||
if (completeWidth > 0) { |
||||
double arcAngle = 2 * pi * (completePercent / 100); |
||||
|
||||
// 从哪开始 1从下开始, 2 从上开始 3 从左开始 4 从右开始 默认从下开始 |
||||
double start = pi / 2; |
||||
if (startType == 2) { |
||||
start = -pi / 2; |
||||
} else if (startType == 3) { |
||||
start = pi; |
||||
} else if (startType == 4) { |
||||
start = pi * 2; |
||||
} |
||||
|
||||
//创建画笔 |
||||
Paint paint = Paint() |
||||
..strokeCap = StrokeCap.round |
||||
..style = PaintingStyle.stroke |
||||
..strokeWidth = completeWidth; |
||||
|
||||
///是渐变圆 |
||||
if (isGradient == true) { |
||||
//渐变圆 深色位置偏移量 默认深色在下面 |
||||
double transfrom; |
||||
if (isTransfrom == false) { |
||||
//深色在下面 |
||||
transfrom = -pi / 2; |
||||
} else { |
||||
//深色在左面 |
||||
transfrom = pi * 2; |
||||
} |
||||
paint.shader = SweepGradient( |
||||
startAngle: 0.0, |
||||
endAngle: pi * 2, |
||||
colors: lineColors, |
||||
tileMode: TileMode.clamp, |
||||
transform: GradientRotation(transfrom), |
||||
).createShader( |
||||
Rect.fromCircle(center: center, radius: radius), |
||||
); |
||||
|
||||
canvas.drawArc(Rect.fromCircle(center: center, radius: radius), start, |
||||
arcAngle, false, paint); |
||||
} else { |
||||
///是实体圆 |
||||
paint.color = completeColor; |
||||
canvas.drawArc( |
||||
Rect.fromCircle(center: center, radius: radius), |
||||
start, // -pi / 2,从正上方开始 pi / 2,从下方开始 |
||||
arcAngle, |
||||
false, |
||||
paint, |
||||
); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@override |
||||
bool shouldRepaint(CustomPainter oldDelegate) => false; |
||||
} |