import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../app/app.dart'; import '../../../backend/backend.dart'; import '../../../core/utils/result.dart'; import '../../feed/presentation/feed_controller.dart'; final providersControllerProvider = AsyncNotifierProvider>( ProvidersController.new, ); class ProvidersController extends AsyncNotifier> { @override Future> build() => _load(); Future toggle(String id, bool enabled) async { await ref.read(providerManagerProvider).enableProvider(id, enabled); if (!enabled) { final settingsResult = await ref.read(settingsServiceProvider).getSettings(); if (settingsResult is Success) { final settings = settingsResult.data; await ref.read(settingsServiceProvider).updateSettings( settings.copyWith( selectedFeedProviderIds: settings.selectedFeedProviderIds .where((providerId) => providerId != id) .toList(growable: false), lastFeedProviderIds: settings.lastFeedProviderIds .where((providerId) => providerId != id) .toList(growable: false), enabledProviderIds: settings.enabledProviderIds .where((providerId) => providerId != id) .toList(growable: false), ), ); } } state = AsyncData(await _load()); ref.invalidate(feedControllerProvider); ref.invalidate(appSettingsProvider); ref.invalidate(providerDiagnosticsProvider); } Future save(ContentProviderConfig config) async { await ref.read(providerManagerProvider).addCustomProvider(config); state = AsyncData(await _load()); ref.invalidate(feedControllerProvider); ref.invalidate(appSettingsProvider); } Future delete(String id) async { await ref.read(providerManagerProvider).deleteProvider(id); state = AsyncData(await _load()); ref.invalidate(feedControllerProvider); ref.invalidate(appSettingsProvider); } Future> _load() async { final result = await ref.read(providerManagerProvider).loadConfigs(enabledOnly: false); return result is Success> ? result.data : const []; } } final providerHealthProvider = StateProvider>((ref) => {}); final providerDiagnosticsProvider = FutureProvider>((ref) async { final result = await ref.watch(providerRepositoryProvider).getDiagnostics(); if (result is Success>) { return { for (final item in result.data) item.providerId: item, }; } return {}; });