anchor.diff:    /// Returns information about the size and position of the tiles in the grid.
     SliverGridLayout getLayout(SliverConstraints constraints);
   
  +  /// Override this method to return true when the children need to be
  +  /// laid out.
  +  ///
  +  /// This should compare the fields of the current delegate and the given
  +  /// `oldDelegate` and return true if the fields are such that the layout would
  +  /// be different.
     bool shouldRelayout(covariant SliverGridDelegate oldDelegate);
   }
   
  
positive.code:   }
  }
  
  class SliverGridParentData extends SliverMultiBoxAdaptorParentData {
    double crossAxisOffset;
  
    @override
    String toString() => 'crossAxisOffset=$crossAxisOffset; ${super.toString()}';
  }
  
  class RenderSliverGrid extends RenderSliverMultiBoxAdaptor {
    RenderSliverGrid({
      @required RenderSliverBoxChildManager childManager,
      @required SliverGridDelegate gridDelegate,
    }) : _gridDelegate = gridDelegate,
         super(childManager: childManager) {
      gridDelegate != null;
    }
  
    @override
  
negative.code:       child.parentData = new SliverGridParentData();
    }
  
    /// The delegate that controls the size and position of the children.
    SliverGridDelegate get gridDelegate => _gridDelegate;
    SliverGridDelegate _gridDelegate;
    set gridDelegate(SliverGridDelegate value) {
      assert(value != null);
      if (_gridDelegate == value)
  