anchor.diff:    void _drawBarLine(Canvas canvas, Size viewSize, LineChartBarData barData) {
       final List<List<FlSpot>> barList = [[]];
   
  -    barData.spots.forEach((spot) {
  -      if (spot.x != null && spot.y != null) {
  -        barList.last.add(spot);
  +    // handle nullability by splitting off the list into multiple
  +    // separate lists when separated by nulls
  +    // and ignore nulls when they're first or last
  +    for (int i = 0; i < barData.spots.length; i++) {
  +      if (barData.spots[i].x != null && barData.spots[i].y != null) {
  +        barList.last.add(barData.spots[i]);
         } else {
  -        barList.add(<FlSpot>[]);
  -      }
  -    });
  -
  +        if (i != 0 && i != barData.spots.length - 1) {
  +          barList.add(<FlSpot>[]);
  +        }
  +      }
  +    }
  +
  +    // paint each sublist that was built above
  +    // bar is passed in seperately from barData
  +    // because barData is the whole line
  +    // and bar is a piece of that line
       barList.forEach((bar) {
  -      print('bar g');
         final barPath = _generateBarPath(viewSize, barData, bar: bar);
         _drawBar(canvas, viewSize, barPath, barData);
   
  -      final belowBarPath = _generateBelowBarPath(viewSize, barData, barPath);
  +      final belowBarPath = _generateBelowBarPath(viewSize, barData, barPath, bar: bar);
         final completelyFillBelowBarPath =
  -          _generateBelowBarPath(viewSize, barData, barPath, fillCompletely: true);
  -
  -      final aboveBarPath = _generateAboveBarPath(viewSize, barData, barPath);
  +          _generateBelowBarPath(viewSize, barData, barPath, bar: bar, fillCompletely: true);
  +
  +      final aboveBarPath = _generateAboveBarPath(viewSize, barData, barPath, bar: bar);
         final completelyFillAboveBarPath =
  -          _generateAboveBarPath(viewSize, barData, barPath, fillCompletely: true);
  +          _generateAboveBarPath(viewSize, barData, barPath, bar: bar, fillCompletely: true);
   
         _drawBelowBar(canvas, viewSize, belowBarPath, completelyFillAboveBarPath, barData);
         _drawAboveBar(canvas, viewSize, aboveBarPath, completelyFillBelowBarPath, barData);
       });
  -
  -    // final barPath = _generateBarPath(viewSize, barData);
  -
  -    // _drawBar(canvas, viewSize, barPath, barData);
     }
   
     void _drawBetweenBarsArea(
  
positive.code:     /// Find the nearest spot (on X axis)
      for (int i = 0; i < barData.spots.length; i++) {
        final spot = barData.spots[i];
        if (spot.y != null) {
          if ((touchedPoint.dx - getPixelX(spot.x, chartViewSize)).abs() <=
              data.lineTouchData.touchSpotThreshold) {
            return LineBarSpot(barData, barDataPosition, spot);
  
negative.code:     aboveBarPath.lineTo(x, y);
  
      /// Line To Top Left
      x = getPixelX(bar[0].x, chartViewSize);
      if (!fillCompletely && barData.aboveBarData.applyCutOffY) {
        y = getPixelY(barData.aboveBarData.cutOffY, chartViewSize);
      } else {
  