moveRenderObjectChild method Null safety

  1. @protected
void moveRenderObjectChild(
  1. covariant RenderObject child,
  2. covariant Object? oldSlot,
  3. covariant Object? newSlot
)
protected">@protected

Move the given child from the given old slot to the given new slot.

The given child is guaranteed to have renderObject as its parent.

The semantics of slot are determined by this element. For example, if this element has a single child, the slot should always be null. If this element has a list of children, the previous sibling element wrapped in an IndexedSlot is a convenient value for the slot.

This method is only ever called if updateChild can end up being called with an existing Element child and a slot that differs from the slot that element was previously given. MultiChildRenderObjectElement does this, for example. SingleChildRenderObjectElement does not (since the slot is always null). An Element that has a specific set of slots with each child always having the same slot (and where children in different slots are never compared against each other for the purposes of updating one slot with the element from another slot) would never call this.

Implementation

@protected
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot) {
  assert(() {
    throw FlutterError.fromParts(<DiagnosticsNode>[
      ErrorSummary('RenderObjectElement.moveChildRenderObject() is deprecated.'),
      toDiagnosticsNode(
        name: 'super.moveChildRenderObject() was called on this Element',
        style: DiagnosticsTreeStyle.shallow,
      ),
      ErrorDescription(
        'moveChildRenderObject() has been deprecated in favor of '
        'moveRenderObjectChild(). See https://github.com/flutter/flutter/issues/63269 '
        'for details.',
      ),
      ErrorHint(
        'Rather than overriding moveChildRenderObject() in your '
        'RenderObjectElement subclass, override moveRenderObjectChild() instead, '
        "and DON'T call super.moveRenderObjectChild(). If you're implementing a "
        'new RenderObjectElement, you should override/implement '
        'insertRenderObjectChild(), moveRenderObjectChild(), and '
        'removeRenderObjectChild().',
      ),
    ]);
  }());
}