generateStepBarPath method

  1. @visibleForTesting
Path generateStepBarPath(
  1. Size viewSize,
  2. LineChartBarData barData,
  3. List<AFlSpot> barSpots,
  4. PaintHolder<LineChartData> holder, {
  5. Path? appendToPath,
})

generates a Step Line Chart bar style path.

Implementation

@visibleForTesting
Path generateStepBarPath(
  Size viewSize,
  LineChartBarData barData,
  List<AFlSpot> barSpots,
  PaintHolder<LineChartData> holder, {
  Path? appendToPath,
}) {
  final path = appendToPath ?? Path();
  final size = barSpots.length;

  final x = getPixelX(barSpots[0].x, viewSize, holder);
  final y = getPixelY(barSpots[0].y, viewSize, holder);
  if (appendToPath == null) {
    path.moveTo(x, y);
  } else {
    path.lineTo(x, y);
  }
  for (var i = 0; i < size; i++) {
    /// CurrentSpot
    final current = Offset(
      getPixelX(barSpots[i].x, viewSize, holder),
      getPixelY(barSpots[i].y, viewSize, holder),
    );

    /// next point
    final next = Offset(
      getPixelX(barSpots[i + 1 < size ? i + 1 : i].x, viewSize, holder),
      getPixelY(barSpots[i + 1 < size ? i + 1 : i].y, viewSize, holder),
    );

    final stepDirection = barData.lineChartStepData.stepDirection;

    // middle
    if (current.dy == next.dy) {
      path.lineTo(next.dx, next.dy);
    } else {
      final deltaX = next.dx - current.dx;

      path
        ..lineTo(current.dx + deltaX - (deltaX * stepDirection), current.dy)
        ..lineTo(current.dx + deltaX - (deltaX * stepDirection), next.dy)
        ..lineTo(next.dx, next.dy);
    }
  }

  return path;
}