- override
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 the State
should
subscribe to that object during initState
, unsubscribe from the old
object and subscribe to the new object when it changes in
didUpdateConfig
, and then unsubscribe from the object in dispose
.
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
.
Source
@override void dispose() { assert(() { if (_ticker == null || !_ticker.isActive) return true; throw new FlutterError( '$this was disposed with an active Ticker.\n' '$runtimeType created a Ticker via its SingleTickerProviderStateMixin, but at the time ' 'dispose() was called on the mixin, that Ticker was still active. The Ticker must ' 'be disposed before calling super.dispose(). Tickers used by AnimationControllers ' 'should be disposed by calling dispose() on the AnimationController itself. ' 'Otherwise, the ticker will leak.\n' 'The offending ticker was: ${_ticker.toString(debugIncludeStack: true)}' ); }); super.dispose(); }