removeDependency<T extends Object> method

Option<Dependency<T>> removeDependency<T extends Object>({
  1. Entity groupEntity = const DefaultEntity(),
})

Removes the first dependency of type T (or its subtypes) found under the specified groupEntity. If the group becomes empty after removal, the group itself is removed.

Implementation

Option<Dependency<T>> removeDependency<T extends Object>({
  Entity groupEntity = const DefaultEntity(),
}) {
  final group = _state[groupEntity];
  if (group == null) {
    return const None();
  }
  final key = group.entries
      .firstWhereOrNull((e) => e.value.value is Resolvable<T>)
      ?.key;
  if (key == null) {
    return const None();
  }
  final dependency = group.remove(key);
  if (dependency == null) {
    return const None();
  }
  if (group.isEmpty) {
    removeGroup(groupEntity: groupEntity);
  }
  UNSAFE:
  onChange.ifSome((self, some) => some.unwrap()()).end();
  return Some(dependency.transf());
}