anchor.diff:          growthDirection: GrowthDirection.reverse,
           advance: childBefore,
           remainingCacheExtent: reverseDirectionRemainingCacheExtent,
  -        cacheOrigin:
  -            (mainAxisExtent - centerOffset).clamp(-_calculatedCacheExtent, 0.0),
  +        cacheOrigin: (mainAxisExtent - centerOffset).clamp(-cacheExtent, 0.0),
         );
         if (result != 0.0) return -result;
       }
  
positive.code:       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,
          );
      }
    }
  
  
negative.code:       growthDirection: GrowthDirection.forward,
        advance: childAfter,
        remainingCacheExtent: forwardDirectionRemainingCacheExtent,
        cacheOrigin: centerOffset.clamp(-cacheExtent, 0.0),
      );
    }
  
  