dispose method
Cancel all active listeners, timers, close the controllers
and disposes other disposables bound with bind.
You should not use this class after it's disposal.
If you only want to cancel/clear stuff, use cancelBindings.
Implementation
Future<void> dispose() async {
_canceling = true;
final ret = <Future>[];
if (_parent != null) {
_parent!._disposables.remove(this);
}
final disposables = _disposables;
_disposables = {};
for (var disposable in disposables) {
ret.add(disposable.dispose());
}
assert(_disposables.isEmpty);
ret.add(cancelBindings());
await Future.wait(ret);
_canceling = false;
}