drawBetweenBarsArea method

  1. @visibleForTesting
void drawBetweenBarsArea(
  1. CanvasWrapper canvasWrapper,
  2. LineChartData data,
  3. BetweenBarsData betweenBarsData,
  4. PaintHolder<LineChartData> holder,
)

Implementation

@visibleForTesting
void drawBetweenBarsArea(
  CanvasWrapper canvasWrapper,
  LineChartData data,
  BetweenBarsData betweenBarsData,
  PaintHolder<LineChartData> holder,
) {
  final viewSize = canvasWrapper.size;
  final fromBarData = data.lineBarsData[betweenBarsData.fromIndex];
  final toBarData = data.lineBarsData[betweenBarsData.toIndex];

  final fromBarSplitLines = fromBarData.spots.splitByNullSpots();
  final toBarSplitLines = toBarData.spots.splitByNullSpots();

  if (fromBarSplitLines.length != toBarSplitLines.length) {
    throw ArgumentError(
      'Cannot draw betWeenBarsArea when null spots are inconsistent.',
    );
  }

  for (var i = 0; i < fromBarSplitLines.length; i++) {
    final fromSpots = fromBarSplitLines[i];
    final toSpots = toBarSplitLines[i].reversed.toList();

    final fromBarPath = generateBarPath(
      viewSize,
      fromBarData,
      fromSpots,
      holder,
    );
    final barPath = generateBarPath(
      viewSize,
      toBarData.copyWith(spots: toSpots),
      toSpots,
      holder,
      appendToPath: fromBarPath,
    );
    final left = min(fromBarData.mostLeftSpot.x, toBarData.mostLeftSpot.x);
    final top = max(fromBarData.mostTopSpot.y, toBarData.mostTopSpot.y);
    final right = max(fromBarData.mostRightSpot.x, toBarData.mostRightSpot.x);
    final bottom = min(
      fromBarData.mostBottomSpot.y,
      toBarData.mostBottomSpot.y,
    );
    final aroundRect = Rect.fromLTRB(
      getPixelX(left, viewSize, holder),
      getPixelY(top, viewSize, holder),
      getPixelX(right, viewSize, holder),
      getPixelY(bottom, viewSize, holder),
    );

    drawBetweenBar(
      canvasWrapper,
      barPath,
      betweenBarsData,
      aroundRect,
      holder,
    );
  }
}