drawPoint method

void drawPoint(
  1. Canvas canvas,
  2. Size size,
  3. List<List<int>> values,
  4. List<List<Offset>> xPoints,
  5. List<List<Offset>> yPoints,
  6. List<int> yValues,
)

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;
      }
    }
  }
}