drawLineCart method
void
drawLineCart({})
绘制曲线图
Implementation
void drawLineCart({
required Canvas canvas,
required int maxLength,
required double strokeWidth,
required Color lineColor,
Shader? chartShader,
}) {
if (getValues().isEmpty) {
return;
}
double startX = 0;
double startY = 0;
Path? clipPath;
int length = values.length;
List<double>? maStartYs;
if (length >= maxLength) {
length += 1;
}
for (int i = 0; i < length; i++) {
int index = i;
if (index == values.length) {
index--;
}
final item = values[index];
double x = indexToX(i) * scale;
double y = valueToY(item.close);
if (i == 0) {
startX = 0;
startY = y;
if (chartShader != null) {
clipPath ??= Path();
}
clipPath?.moveTo(0, canvasHeight);
}
clipPath?.lineTo(x, y);
drawLine(
canvas: canvas,
startX: startX,
startY: startY,
endX: x,
endY: y,
strokeWidth: strokeWidth,
color: lineColor);
if (item.mas != null) {
maStartYs ??= List.filled(item.mas!.length, 0);
for (int m = 0, len = item.mas!.length; m < len; m++) {
double ma = item.mas![m];
if (ma > 0) {
double my = valueToY(ma);
if (maStartYs[m] == 0) {
maStartYs[m] = my;
}
drawLine(
canvas: canvas,
startX: startX,
startY: maStartYs[m],
endX: x,
endY: my,
strokeWidth: maStrokeWidth,
color: maDayColors[m]);
maStartYs[m] = my;
}
}
}
/// 绘制最后一个点的 指示器
if (index == values.length - 1 && values.length < maxLength) {
canvas.drawCircle(
Offset(x, y),
strokeWidth * 2,
Paint()
..color = lineColor
..strokeWidth);
}
startX = x;
startY = y;
}
/// 绘制阴影
if (clipPath != null) {
getValues().reduce(max);
canvas.save();
_bezierFillPaint.shader = chartShader;
clipPath.lineTo(startX, canvasHeight);
clipPath.close();
canvas.clipPath(clipPath);
var rect = Rect.fromLTWH(
0,
valueToY(_clipTopValue),
(values.length * (pointWidth + pointSpace)) * scale,
canvasHeight,
);
canvas.drawRect(rect, _bezierFillPaint);
canvas.restore();
}
}