anchor.diff:    }
   
     /// Specify the child's origin relative to this origin.
  +  ///
  +  /// Call this from your [performLayout] function to position each
  +  /// child. If you do not call this for a child, its position will
  +  /// remain unchanged. Children initially have their position set to
  +  /// (0,0), i.e. the top left of the [RenderCustomMultiChildLayoutBox].
     void positionChild(Object childId, Offset offset) {
       final RenderBox child = _idToChild[childId];
       assert(() {
  
positive.code: }
  
  /// A delegate that controls the layout of multiple children.
  abstract class MultiChildLayoutDelegate {
    Map<Object, RenderBox> _idToChild;
    Set<RenderBox> _debugChildrenNeedingLayout;
  
    /// Returns the size of this object given the incoming constraints.
    /// The size cannot reflect the instrinsic sizes of the children.
    /// If this layout has a fixed width or height the returned size
    /// can reflect that.
    Size getSize(BoxConstraints constraints) => constraints.biggest;
  
    /// True if a non-null LayoutChild was provided for the specified id.
    bool isChild(Object childId) => _idToChild[childId] != null;
  
    /// Ask the child to update its layout within the limits specified by
    /// the constraints parameter. The child's size is returned.
    Size layoutChild(Object childId, BoxConstraints constraints) {
      final RenderBox child = _idToChild[childId];
      assert(() {
  
negative.code:   }
  
    void _callPerformLayout(Size size, BoxConstraints constraints, RenderBox firstChild) {
      // A particular layout delegate could be called reentrantly, e.g. if it used
      // by both a parent and a child. So, we must restore the _idToChild map when
      // we return.
      final Map<Object, RenderBox> previousIdToChild = _idToChild;
  
      Set<RenderBox> debugPreviousChildrenNeedingLayout;
  