import 'package:aioa_mobile/core/auth/auth_session_controller.dart'; import 'package:aioa_mobile/core/auth/authenticated_http_client.dart'; import 'package:aioa_mobile/core/config/runtime_config.dart'; import 'package:aioa_mobile/features/profile/data/device_repository.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final deviceRepositoryProvider = Provider( (ref) => DeviceRepository( client: ref.watch(authenticatedHttpClientProvider), baseUrl: RuntimeConfig.apiBaseUrl, ), ); final deviceListProvider = AsyncNotifierProvider>( DeviceController.new, ); class DeviceController extends AsyncNotifier> { @override Future> build() => ref.read(deviceRepositoryProvider).list(); Future revoke(String id) async { try { final repository = ref.read(deviceRepositoryProvider); final current = await repository.isCurrent(id); await repository.revoke(id); if (current) { await ref.read(authSessionProvider.notifier).invalidateDeviceSession(); } else { state = AsyncData([ for (final item in state.value ?? const []) if (item.id != id) item, ]); } return null; } catch (error) { return error.toString(); } } }