unmount method

  1. @override
void unmount()
override

Transition from the "inactive" to the "defunct" lifecycle state.

Called when the framework determines that an inactive element will never be reactivated. At the end of each animation frame, the framework calls unmount on any remaining inactive elements, preventing inactive elements from remaining inactive for longer than a single animation frame.

After this function is called, the element will not be incorporated into the tree again.

Any resources this element holds should be released at this point. For example, RenderObjectElement.unmount calls RenderObject.dispose and nulls out its reference to the render object.

See the lifecycle documentation for Element for additional information.

Implementations of this method should end with a call to the inherited method, as in super.unmount().

Implementation

@override
void unmount() {
  super.unmount();
  state.dispose();
  assert(() {
    if (state._debugLifecycleState == _StateLifecycle.defunct) {
      return true;
    }
    throw FlutterError.fromParts(<DiagnosticsNode>[
      ErrorSummary('${state.runtimeType}.dispose failed to call super.dispose.'),
      ErrorDescription(
        'dispose() implementations must always call their superclass dispose() method, to ensure '
        'that all the resources used by the widget are fully released.',
      ),
    ]);
  }());
  state._element = null;
  // Release resources to reduce the severity of memory leaks caused by
  // defunct, but accidentally retained Elements.
  _state = null;
}