# dispose method

1. @override

void dispose ()

Called when this object is removed from the tree permanently.

The framework calls this method when this `State` object will never build again. After the framework calls dispose, the `State` object is considered unmounted and the mounted property is false. It is an error to call setState at this point. This stage of the lifecycle is terminal: there is no way to remount a `State` object that has been disposed.

Subclasses should override this method to release any resources retained by this object (e.g., stop any active animations).

If a `State`'s build method depends on an object that can itself change state, for example a `ChangeNotifier` or Stream, or some other object to which one can subscribe to receive notifications, then be sure to subscribe and unsubscribe properly in initState, didUpdateWidget, and dispose:

- In initState, subscribe to the object.
- In didUpdateWidget unsubscribe from the old object and subscribe to the new one if the updated widget configuration requires replacing the object.
- In dispose, unsubscribe from the object.

If you override this, make sure to end your method with a call to super.dispose().

See also deactivate, which is called prior to dispose.

## Implementation

    @override
    void dispose() {
      _focusNode?.dispose();
      _closeInputConnectionIfNeeded();
      _suggestionsStreamController.close();
      super.dispose();
    }