anchor.diff:    /// and we use isCurved to find out how we should generate it,
     /// If you want to concatenate paths together for creating an area between
     /// multiple bars for example, you can pass the appendToPath
  -  Path _generateBarPath(Size viewSize, LineChartBarData barData, {Path appendToPath}) {
  +  Path _generateBarPath(Size viewSize, LineChartBarData barData,
  +      {Path appendToPath, List<FlSpot> bar}) {
       viewSize = getChartUsableDrawSize(viewSize);
       final Path path = appendToPath ?? Path();
  -    final int size = barData.spots.length;
  +    final int size = bar.length;
   
       var temp = const Offset(0.0, 0.0);
   
  -    final double x = getPixelX(barData.spots[0].x, viewSize);
  -    final double y = getPixelY(barData.spots[0].y, viewSize);
  +    final double x = getPixelX(bar[0].x, viewSize);
  +    final double y = getPixelY(bar[0].y, viewSize);
       if (appendToPath == null) {
         path.moveTo(x, y);
       } else {
  
positive.code:     /// Find the nearest spot (on X axis)
      for (int i = 0; i < barData.spots.length; i++) {
        final spot = barData.spots[i];
        if ((touchedPoint.dx - getPixelX(spot.x, chartViewSize)).abs() <=
            data.lineTouchData.touchSpotThreshold) {
          return LineBarSpot(barData, barDataPosition, spot);
        }
      }
  
  
negative.code:     for (int i = 1; i < size; i++) {
        /// CurrentSpot
        final current = Offset(
          getPixelX(bar[i].x, viewSize),
          getPixelY(bar[i].y, viewSize),
        );
  
        /// previous spot
        final previous = Offset(
          getPixelX(bar[i - 1].x, viewSize),
          getPixelY(bar[i - 1].y, viewSize),
        );
  
        /// next point
        final next = Offset(
          getPixelX(bar[i + 1 < size ? i + 1 : i].x, viewSize),
          getPixelY(bar[i + 1 < size ? i + 1 : i].y, viewSize),
        );
  
        final controlPoint1 = previous + temp;
  