unregister method

Future<void> unregister(
  1. String adapterId
)

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