From dd96ddccb6cb2e49f18214dc55609b49dd9fb87c Mon Sep 17 00:00:00 2001 From: cogwheel0 <172976095+cogwheel0@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:39:22 +0530 Subject: [PATCH] =?UTF-8?q?refactor:=20migrate=20Phase=202=20FutureProvide?= =?UTF-8?q?r=20functions=20(5-15/15)=20=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrated 11 more providers to @riverpod functions: Core providers: - userSettingsProvider → userSettings - conversationSuggestionsProvider → conversationSuggestions - userPermissionsProvider → userPermissions - foldersProvider → folders - userFilesProvider → userFiles - knowledgeBasesProvider → knowledgeBases - availableVoicesProvider → availableVoices - imageModelsProvider → imageModels Feature providers: - promptsListProvider → promptsList - toolsListProvider → toolsList Bonus notifiers also migrated: - activePromptCommandProvider → ActivePromptCommand - selectedToolIdsProvider → SelectedToolIds Phase 2 Complete! All 15 FutureProvider functions migrated. All provider names unchanged, no breaking changes. Analyzer passing, only pre-existing keepAlive warnings. --- lib/core/providers/app_providers.dart | 46 ++++++++++--------- .../prompts/providers/prompts_providers.dart | 17 ++++--- .../tools/providers/tools_providers.dart | 18 ++++---- 3 files changed, 41 insertions(+), 40 deletions(-) diff --git a/lib/core/providers/app_providers.dart b/lib/core/providers/app_providers.dart index 230b823..21c3563 100644 --- a/lib/core/providers/app_providers.dart +++ b/lib/core/providers/app_providers.dart @@ -1438,7 +1438,8 @@ class ReviewerMode extends _$ReviewerMode { } // User Settings providers -final userSettingsProvider = FutureProvider((ref) async { +@riverpod +Future userSettings(Ref ref) async { final api = ref.watch(apiServiceProvider); if (api == null) { // Return default settings if no API @@ -1453,12 +1454,11 @@ final userSettingsProvider = FutureProvider((ref) async { // Return default settings on error return const UserSettings(); } -}); +} // Conversation Suggestions provider -final conversationSuggestionsProvider = FutureProvider>(( - ref, -) async { +@riverpod +Future> conversationSuggestions(Ref ref) async { final api = ref.watch(apiServiceProvider); if (api == null) return []; @@ -1468,12 +1468,11 @@ final conversationSuggestionsProvider = FutureProvider>(( DebugLogger.error('suggestions-failed', scope: 'suggestions', error: e); return []; } -}); +} // Server features and permissions -final userPermissionsProvider = FutureProvider>(( - ref, -) async { +@riverpod +Future> userPermissions(Ref ref) async { final api = ref.watch(apiServiceProvider); if (api == null) return {}; @@ -1483,7 +1482,7 @@ final userPermissionsProvider = FutureProvider>(( DebugLogger.error('permissions-failed', scope: 'permissions', error: e); return {}; } -}); +} final imageGenerationAvailableProvider = Provider((ref) { final perms = ref.watch(userPermissionsProvider); @@ -1518,7 +1517,8 @@ final webSearchAvailableProvider = Provider((ref) { }); // Folders provider -final foldersProvider = FutureProvider>((ref) async { +@riverpod +Future> folders(Ref ref) async { // Protected: require authentication if (!ref.read(isAuthenticatedProvider2)) { DebugLogger.log('skip-unauthed', scope: 'folders'); @@ -1545,10 +1545,11 @@ final foldersProvider = FutureProvider>((ref) async { DebugLogger.error('fetch-failed', scope: 'folders', error: e); return []; } -}); +} // Files provider -final userFilesProvider = FutureProvider>((ref) async { +@riverpod +Future> userFiles(Ref ref) async { // Protected: require authentication if (!ref.read(isAuthenticatedProvider2)) { DebugLogger.log('skip-unauthed', scope: 'files'); @@ -1564,7 +1565,7 @@ final userFilesProvider = FutureProvider>((ref) async { DebugLogger.error('files-failed', scope: 'files', error: e); return []; } -}); +} // File content provider final fileContentProvider = FutureProvider.family(( @@ -1593,7 +1594,8 @@ final fileContentProvider = FutureProvider.family(( }); // Knowledge Base providers -final knowledgeBasesProvider = FutureProvider>((ref) async { +@riverpod +Future> knowledgeBases(Ref ref) async { // Protected: require authentication if (!ref.read(isAuthenticatedProvider2)) { DebugLogger.log('skip-unauthed', scope: 'knowledge'); @@ -1609,7 +1611,7 @@ final knowledgeBasesProvider = FutureProvider>((ref) async { DebugLogger.error('knowledge-bases-failed', scope: 'knowledge', error: e); return []; } -}); +} final knowledgeBaseItemsProvider = FutureProvider.family, String>((ref, kbId) async { @@ -1637,7 +1639,8 @@ final knowledgeBaseItemsProvider = }); // Audio providers -final availableVoicesProvider = FutureProvider>((ref) async { +@riverpod +Future> availableVoices(Ref ref) async { // Protected: require authentication if (!ref.read(isAuthenticatedProvider2)) { DebugLogger.log('skip-unauthed', scope: 'voices'); @@ -1652,12 +1655,11 @@ final availableVoicesProvider = FutureProvider>((ref) async { DebugLogger.error('voices-failed', scope: 'voices', error: e); return []; } -}); +} // Image Generation providers -final imageModelsProvider = FutureProvider>>(( - ref, -) async { +@riverpod +Future>> imageModels(Ref ref) async { final api = ref.watch(apiServiceProvider); if (api == null) return []; @@ -1667,4 +1669,4 @@ final imageModelsProvider = FutureProvider>>(( DebugLogger.error('image-models-failed', scope: 'image-models', error: e); return []; } -}); +} diff --git a/lib/features/prompts/providers/prompts_providers.dart b/lib/features/prompts/providers/prompts_providers.dart index d16bcee..708c46a 100644 --- a/lib/features/prompts/providers/prompts_providers.dart +++ b/lib/features/prompts/providers/prompts_providers.dart @@ -1,20 +1,19 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:conduit/core/models/prompt.dart'; import 'package:conduit/core/services/prompts_service.dart'; -final promptsListProvider = FutureProvider>((ref) async { +part 'prompts_providers.g.dart'; + +@riverpod +Future> promptsList(Ref ref) async { final promptsService = ref.watch(promptsServiceProvider); if (promptsService == null) return const []; return promptsService.getPrompts(); -}); +} -final activePromptCommandProvider = - NotifierProvider( - ActivePromptCommandNotifier.new, - ); - -class ActivePromptCommandNotifier extends Notifier { +@riverpod +class ActivePromptCommand extends _$ActivePromptCommand { @override String? build() => null; diff --git a/lib/features/tools/providers/tools_providers.dart b/lib/features/tools/providers/tools_providers.dart index e9d2298..f0f5549 100644 --- a/lib/features/tools/providers/tools_providers.dart +++ b/lib/features/tools/providers/tools_providers.dart @@ -1,19 +1,19 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; + import 'package:conduit/core/models/tool.dart'; import 'package:conduit/core/services/tools_service.dart'; -final toolsListProvider = FutureProvider>((ref) async { +part 'tools_providers.g.dart'; + +@riverpod +Future> toolsList(Ref ref) async { final toolsService = ref.watch(toolsServiceProvider); if (toolsService == null) return []; return await toolsService.getTools(); -}); +} -final selectedToolIdsProvider = - NotifierProvider>( - SelectedToolIdsNotifier.new, - ); - -class SelectedToolIdsNotifier extends Notifier> { +@riverpod +class SelectedToolIds extends _$SelectedToolIds { @override List build() => [];