dispose method

Future<void> dispose()

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;
}