paintSurface method

void paintSurface(
  1. Canvas canvas
)

Implementation

void paintSurface(Canvas canvas) {
  if (series.data.isEmpty) {
    return;
  }
  processSeries();
  var height = innerRect.height;
  var x0 = 0.0;
  var y0 = height - (series.data[0].value * verticalScale);

  var fillArea = Path();
  var mainArea = Path();
  fillArea.moveTo(x0, y0);
  fillArea.lineTo(x0 + horizontalScale / 2, y0);
  mainArea.moveTo(x0, y0);
  mainArea.lineTo(x0 + horizontalScale / 2, y0);

  var length = series.data.length;
  for (int i = 1; i < length; i++) {
    var x1 =
        i * horizontalScale - horizontalScale / 3 * 2 + horizontalScale / 2;
    var y1 = height - (series.data[i - 1].value * verticalScale);
    var x2 =
        i * horizontalScale - (horizontalScale / 3) + horizontalScale / 2;
    var y2 = height - (series.data[i].value * verticalScale);
    var x3 = i * horizontalScale + horizontalScale / 2;
    var y3 = height - (series.data[i].value * verticalScale);
    fillArea.cubicTo(x1, y1, x2, y2, x3, y3);
    mainArea.cubicTo(x1, y1, x2, y2, x3, y3);
  }
  var lastY = height - (series.data[length - 1].value * verticalScale);
  fillArea.lineTo(outerRect.width, lastY);
  fillArea.lineTo(outerRect.width, outerRect.height);
  fillArea.lineTo(0, outerRect.height);
  fillArea.close();
  canvas.drawPath(mainArea, outlineMainPaint);
  canvas.drawPath(fillArea, fillPaint);

  // Draw the dashed horizontal line if referenceValue is valid
  if (series.referenceValue >= 0) {
    var referenceY = height - (series.referenceValue * verticalScale);
    var dashWidth = 5.0;
    var dashSpace = 6.0;
    double startX = 0;

    while (startX < outerRect.width) {
      canvas.drawLine(Offset(startX, referenceY),
          Offset(startX + dashWidth, referenceY), dashedLinePaint);
      startX += dashWidth + dashSpace;
    }
  }
}