import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../app/error_message.dart'; import '../../../app/load_state.dart'; import '../../../models/api_key_info.dart'; import '../../shared/providers/core_providers.dart'; final apiKeysProvider = NotifierProvider>>( () => ApiKeysNotifier(), ); class ApiKeysNotifier extends Notifier>> { @override LoadState> build() => const LoadState.idle([]); Future load() async { state = LoadState.loading(state.data); try { final api = ref.read(apiProvider); final res = await api.getApiKeys(); final keys = ApiKeyInfo.listFromApi(res.data); state = keys.isEmpty ? LoadState.empty(keys) : LoadState.data(keys); } catch (e) { state = LoadState.error(state.data, describeLoadError(e)); } } Future create(String name, {bool isAdmin = false}) async { final api = ref.read(apiProvider); final res = await api.createApiKey(name, isAdmin: isAdmin); await load(); if (res.data is Map) { final key = res.data['key']?.toString(); if (key != null && key.isNotEmpty) { return key; } } throw const FormatException('backend не вернул созданный API key'); } Future revoke(String key) async { await ref.read(apiProvider).revokeApiKey(key); await load(); } Future activate(String key) async { await ref.read(apiProvider).activateApiKey(key); await load(); } }