unregister<T extends Object> method

void unregister<T extends Object>({
  1. Type? type,
  2. String? name,
})

Unregisters a dependency object by its type T or name.

Implementation

void unregister<T extends Object>({Type? type, final String? name}) {
  if (type != null && T.toString() != 'Object' && type.toString() != T.toString()) {
    throw WeaverException(
      'calling unregister argument and passing conflicting arguments for the type of the '
      'object that needs to be unregistered is forbidden!, please specify the type correctly only using'
      'generic type argument or value argument. eg: either call weaver.unregister<TYPE>() or weaver.unregister(type: type). '
      'calling weaver.unregister<TYPE_1>(type: TYPE_2) is forbidden',
    );
  }
  type = type ?? T;

  if (name == null && type.toString() == 'Object') {
    throw WeaverException(
      'Type or name is required to unregister the dependency object. passed type of "$type" is not accepted',
    );
  } else if (name != null && type.toString() == 'Object') {
    _dependencyMap.removeWhere((final dependencyKey) => dependencyKey.name == name);
    notifyObservers();
  } else {
    final dependencyKey = DependencyKey(type: type, name: name);
    if (isRegistered(type: type, name: name)) {
      _dependencyMap.remove(dependencyKey);
    } else {
      log('⚠️ Tried to unregister an object that is not registered. '
          'There is no object registered with type: $type ${name != null ? "and name:$name" : ""}');
    }
    notifyObservers();
  }
}