anchor.diff:        case Axis.horizontal:
           offset.applyViewportDimension(size.width);
           break;
  -    }
  -  }
  -
  -  @override
  -  Rect describeSemanticsClip(RenderSliver child) {
  -    assert(axis != null);
  -
  -    if (_calculatedCacheExtent == null) {
  -      return semanticBounds;
  -    }
  -
  -    switch (axis) {
  -      case Axis.vertical:
  -        return Rect.fromLTRB(
  -          semanticBounds.left,
  -          semanticBounds.top - _calculatedCacheExtent,
  -          semanticBounds.right,
  -          semanticBounds.bottom + _calculatedCacheExtent,
  -        );
  -      default:
  -        return Rect.fromLTRB(
  -          semanticBounds.left - _calculatedCacheExtent,
  -          semanticBounds.top,
  -          semanticBounds.right + _calculatedCacheExtent,
  -          semanticBounds.bottom,
  -        );
       }
     }
   
  
positive.code:   double _maxScrollExtent;
    bool _hasVisualOverflow = false;
  
    /// This value is set during layout based on the [CacheExtentStyle].
    ///
    /// When the style is [CacheExtentStyle.viewport], it is the main axis extent
    /// of the viewport multiplied by the requested cache extent, which is still
    /// expressed in pixels.
    double _calculatedCacheExtent;
  
    @override
    double get anchor => _anchor;
  
  
negative.code:         growthDirection: GrowthDirection.reverse,
          advance: childBefore,
          remainingCacheExtent: reverseDirectionRemainingCacheExtent,
          cacheOrigin: (mainAxisExtent - centerOffset).clamp(-cacheExtent, 0.0),
        );
        if (result != 0.0) return -result;
      }
  