calculateMaxAxisValues static method

LineChartMinMaxAxisValues calculateMaxAxisValues(
  1. List<LineChartBarData> lineBarsData
)

Implementation

static LineChartMinMaxAxisValues calculateMaxAxisValues(
  List<LineChartBarData> lineBarsData,
) {
  if (lineBarsData.isEmpty) {
    return LineChartMinMaxAxisValues(0, 0, 0, 0);
  }

  final listWrapper = lineBarsData.toWrapperClass();

  if (_cachedResults.containsKey(listWrapper)) {
    return _cachedResults[listWrapper]!.copyWith(readFromCache: true);
  }

  final LineChartBarData lineBarData;
  try {
    lineBarData =
        lineBarsData.firstWhere((element) => element.spots.isNotEmpty);
  } catch (e) {
    // There is no lineBarData with at least one spot
    return LineChartMinMaxAxisValues(0, 0, 0, 0);
  }

  final AFlSpot firstValidSpot;
  try {
    firstValidSpot = lineBarData.spots
        .firstWhere((element) => element != AFlSpot.nullSpot);
  } catch (e) {
    // There is no valid spot
    return LineChartMinMaxAxisValues(0, 0, 0, 0);
  }

  var minX = firstValidSpot.x;
  var maxX = firstValidSpot.x;
  var minY = firstValidSpot.y;
  var maxY = firstValidSpot.y;

  for (final barData in lineBarsData) {
    if (barData.spots.isEmpty) {
      continue;
    }

    if (barData.mostRightSpot.x > maxX) {
      maxX = barData.mostRightSpot.x;
    }

    if (barData.mostLeftSpot.x < minX) {
      minX = barData.mostLeftSpot.x;
    }

    if (barData.mostTopSpot.y > maxY) {
      maxY = barData.mostTopSpot.y;
    }

    if (barData.mostBottomSpot.y < minY) {
      minY = barData.mostBottomSpot.y;
    }
  }

  final result = LineChartMinMaxAxisValues(minX, maxX, minY, maxY);
  _cachedResults[listWrapper] = result;
  return result;
}