Files
AIOA/mobile/lib/features/profile/application/device_controller.dart
T
2026-07-18 19:20:07 +08:00

41 lines
1.3 KiB
Dart

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, List<UserDeviceItem>>(
DeviceController.new,
);
class DeviceController extends AsyncNotifier<List<UserDeviceItem>> {
@override
Future<List<UserDeviceItem>> build() =>
ref.read(deviceRepositoryProvider).list();
Future<String?> 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 <UserDeviceItem>[])
if (item.id != id) item,
]);
}
return null;
} catch (error) {
return error.toString();
}
}
}