drawPoint method
void
drawPoint()
vai desenhar o ponto de encontro entre os eixos x e y
Implementation
void drawPoint(
Canvas canvas,
Size size,
List<List<int>> values,
List<List<Offset>> xPoints,
List<List<Offset>> yPoints,
List<int> yValues) {
//Map<int, Color> colors = {0: Colors.black, 1: Colors.red};
Offset initialPoint = const Offset(0, 0);
Offset endPoint = const Offset(0, 0);
for (int j = 0; j < names.length; j++) {
int cont = 0;
for (int i = (values[j].length - 1); i >= 0; i--) {
if (values[j].length == labels.length) {
//posição do valor no eixo y
var value = values[j][i];
var pos = yValues.indexOf(value);
//como estamos a desenhar de trás para frente, precisamos pegar o próximo valor que será tratado como o ponto inicial do próximo desenho
if (i >= 1) {
var nextValue = values[j][i - 1];
var nextLabel = labels[i -
1]; //problema nessa linha, isso obriga as labels a terem o mesmo tamanho que os valores
var nextPosY = yValues.indexOf(nextValue);
var nextPosX = labels.indexOf(nextLabel);
//se for o último valor, o ponto inicial é o mesmo do final
if (i == values[j].length - 1) {
initialPoint =
Offset(xPoints[nextPosX][2].dx, yPoints[nextPosY][2].dy);
}
endPoint = Offset(xPoints[nextPosX][2].dx, yPoints[nextPosY][2].dy);
}
if (cont == 0) {
endPoint = Offset(xPoints[i][2].dx, yPoints[pos][2].dy);
}
final paint = Paint()
..color = colors[j]
..strokeWidth = 3
..style = PaintingStyle.fill;
canvas.drawCircle(
Offset(xPoints[i][2].dx, yPoints[pos][2].dy), 2, paint);
//desenho da primeira linha, começar do zero
if (i == 0) {
drawLineLink(canvas, Offset(30, size.height - 30),
Offset(xPoints[i][2].dx, yPoints[pos][2].dy), colors[j]);
} else if (i == (values[j].length - 1)) {
//desenho da última linha
drawLineLink(canvas, initialPoint, endPoint, colors[j]);
} else {
//desenho da penúltima linha até a segunda
drawLineLink(canvas, initialPoint, endPoint, colors[j]);
initialPoint = endPoint;
}
cont++;
} else {
break;
}
}
}
}