anchor.diff:      // centerOffset is the offset from the leading edge of the RenderViewport
       // to the zero scroll offset (the line between the forward slivers and the
       // reverse slivers).
  -    final centerOffset = mainAxisExtent * anchor - correctedOffset;
  +    final double centerOffset = mainAxisExtent * anchor - correctedOffset;
       final double reverseDirectionRemainingPaintExtent =
           centerOffset.clamp(0.0, mainAxisExtent);
       final double forwardDirectionRemainingPaintExtent =
           (mainAxisExtent - centerOffset).clamp(0.0, mainAxisExtent);
   
  -    final fullCacheExtent = mainAxisExtent + 2 * cacheExtent;
  -    final centerCacheOffset = centerOffset + cacheExtent;
  +    switch (cacheExtentStyle) {
  +      case CacheExtentStyle.pixel:
  +        _calculatedCacheExtent = cacheExtent;
  +        break;
  +      case CacheExtentStyle.viewport:
  +        _calculatedCacheExtent = mainAxisExtent * cacheExtent;
  +        break;
  +    }
  +
  +    final double fullCacheExtent = mainAxisExtent + 2 * _calculatedCacheExtent;
  +    final double centerCacheOffset = centerOffset + _calculatedCacheExtent;
       final double reverseDirectionRemainingCacheExtent =
           centerCacheOffset.clamp(0.0, fullCacheExtent);
       final double forwardDirectionRemainingCacheExtent =
           (fullCacheExtent - centerCacheOffset).clamp(0.0, fullCacheExtent);
   
  -    final leadingNegativeChild = childBefore(center);
  +    final RenderSliver leadingNegativeChild = childBefore(center);
   
       if (leadingNegativeChild != null) {
         // negative scroll offsets
  -      final result = layoutChildSequence(
  +      final double result = layoutChildSequence(
           child: leadingNegativeChild,
           scrollOffset: math.max(mainAxisExtent, centerOffset) - mainAxisExtent,
           overlap: 0.0,
  
positive.code:       growthDirection: GrowthDirection.forward,
        advance: childAfter,
        remainingCacheExtent: forwardDirectionRemainingCacheExtent,
        cacheOrigin: centerOffset.clamp(-cacheExtent, 0.0),
      );
    }
  
  
negative.code:         growthDirection: GrowthDirection.reverse,
          advance: childBefore,
          remainingCacheExtent: reverseDirectionRemainingCacheExtent,
          cacheOrigin:
              (mainAxisExtent - centerOffset).clamp(-_calculatedCacheExtent, 0.0),
        );
        if (result != 0.0) return -result;
      }
  