unregister method
Unregister an adapter with proper cleanup.
Checks for dependents before removal. Throws StateError if other adapters depend on this one.
Implementation
Future<void> unregister(String adapterId) async {
final adapter = _adapters.where((a) => a.id == adapterId).firstOrNull;
if (adapter == null) {
debugPrint('AdapterManager: Adapter $adapterId not found');
return;
}
// Check if other adapters depend on this one
final dependents = _adapters
.where((a) => a.dependencies.any((d) => d.split(':')[0] == adapterId))
.map((a) => a.id)
.toList();
if (dependents.isNotEmpty) {
throw StateError(
'AdapterManager: Cannot unregister "$adapterId". '
'The following adapters depend on it: ${dependents.join(", ")}',
);
}
try {
await adapter.onDispose(AirDI());
} catch (e, st) {
adapter.onError(e, st);
}
_adapters.removeWhere((a) => a.id == adapterId);
debugPrint('AdapterManager: Adapter $adapterId unregistered');
notifyListeners();
}