refactor: migrate Phase 2 FutureProvider functions (5-15/15) ✅
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.
This commit is contained in:
@@ -1438,7 +1438,8 @@ class ReviewerMode extends _$ReviewerMode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// User Settings providers
|
// User Settings providers
|
||||||
final userSettingsProvider = FutureProvider<UserSettings>((ref) async {
|
@riverpod
|
||||||
|
Future<UserSettings> userSettings(Ref ref) async {
|
||||||
final api = ref.watch(apiServiceProvider);
|
final api = ref.watch(apiServiceProvider);
|
||||||
if (api == null) {
|
if (api == null) {
|
||||||
// Return default settings if no API
|
// Return default settings if no API
|
||||||
@@ -1453,12 +1454,11 @@ final userSettingsProvider = FutureProvider<UserSettings>((ref) async {
|
|||||||
// Return default settings on error
|
// Return default settings on error
|
||||||
return const UserSettings();
|
return const UserSettings();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
// Conversation Suggestions provider
|
// Conversation Suggestions provider
|
||||||
final conversationSuggestionsProvider = FutureProvider<List<String>>((
|
@riverpod
|
||||||
ref,
|
Future<List<String>> conversationSuggestions(Ref ref) async {
|
||||||
) async {
|
|
||||||
final api = ref.watch(apiServiceProvider);
|
final api = ref.watch(apiServiceProvider);
|
||||||
if (api == null) return [];
|
if (api == null) return [];
|
||||||
|
|
||||||
@@ -1468,12 +1468,11 @@ final conversationSuggestionsProvider = FutureProvider<List<String>>((
|
|||||||
DebugLogger.error('suggestions-failed', scope: 'suggestions', error: e);
|
DebugLogger.error('suggestions-failed', scope: 'suggestions', error: e);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
// Server features and permissions
|
// Server features and permissions
|
||||||
final userPermissionsProvider = FutureProvider<Map<String, dynamic>>((
|
@riverpod
|
||||||
ref,
|
Future<Map<String, dynamic>> userPermissions(Ref ref) async {
|
||||||
) async {
|
|
||||||
final api = ref.watch(apiServiceProvider);
|
final api = ref.watch(apiServiceProvider);
|
||||||
if (api == null) return {};
|
if (api == null) return {};
|
||||||
|
|
||||||
@@ -1483,7 +1482,7 @@ final userPermissionsProvider = FutureProvider<Map<String, dynamic>>((
|
|||||||
DebugLogger.error('permissions-failed', scope: 'permissions', error: e);
|
DebugLogger.error('permissions-failed', scope: 'permissions', error: e);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
final imageGenerationAvailableProvider = Provider<bool>((ref) {
|
final imageGenerationAvailableProvider = Provider<bool>((ref) {
|
||||||
final perms = ref.watch(userPermissionsProvider);
|
final perms = ref.watch(userPermissionsProvider);
|
||||||
@@ -1518,7 +1517,8 @@ final webSearchAvailableProvider = Provider<bool>((ref) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Folders provider
|
// Folders provider
|
||||||
final foldersProvider = FutureProvider<List<Folder>>((ref) async {
|
@riverpod
|
||||||
|
Future<List<Folder>> folders(Ref ref) async {
|
||||||
// Protected: require authentication
|
// Protected: require authentication
|
||||||
if (!ref.read(isAuthenticatedProvider2)) {
|
if (!ref.read(isAuthenticatedProvider2)) {
|
||||||
DebugLogger.log('skip-unauthed', scope: 'folders');
|
DebugLogger.log('skip-unauthed', scope: 'folders');
|
||||||
@@ -1545,10 +1545,11 @@ final foldersProvider = FutureProvider<List<Folder>>((ref) async {
|
|||||||
DebugLogger.error('fetch-failed', scope: 'folders', error: e);
|
DebugLogger.error('fetch-failed', scope: 'folders', error: e);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
// Files provider
|
// Files provider
|
||||||
final userFilesProvider = FutureProvider<List<FileInfo>>((ref) async {
|
@riverpod
|
||||||
|
Future<List<FileInfo>> userFiles(Ref ref) async {
|
||||||
// Protected: require authentication
|
// Protected: require authentication
|
||||||
if (!ref.read(isAuthenticatedProvider2)) {
|
if (!ref.read(isAuthenticatedProvider2)) {
|
||||||
DebugLogger.log('skip-unauthed', scope: 'files');
|
DebugLogger.log('skip-unauthed', scope: 'files');
|
||||||
@@ -1564,7 +1565,7 @@ final userFilesProvider = FutureProvider<List<FileInfo>>((ref) async {
|
|||||||
DebugLogger.error('files-failed', scope: 'files', error: e);
|
DebugLogger.error('files-failed', scope: 'files', error: e);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
// File content provider
|
// File content provider
|
||||||
final fileContentProvider = FutureProvider.family<String, String>((
|
final fileContentProvider = FutureProvider.family<String, String>((
|
||||||
@@ -1593,7 +1594,8 @@ final fileContentProvider = FutureProvider.family<String, String>((
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Knowledge Base providers
|
// Knowledge Base providers
|
||||||
final knowledgeBasesProvider = FutureProvider<List<KnowledgeBase>>((ref) async {
|
@riverpod
|
||||||
|
Future<List<KnowledgeBase>> knowledgeBases(Ref ref) async {
|
||||||
// Protected: require authentication
|
// Protected: require authentication
|
||||||
if (!ref.read(isAuthenticatedProvider2)) {
|
if (!ref.read(isAuthenticatedProvider2)) {
|
||||||
DebugLogger.log('skip-unauthed', scope: 'knowledge');
|
DebugLogger.log('skip-unauthed', scope: 'knowledge');
|
||||||
@@ -1609,7 +1611,7 @@ final knowledgeBasesProvider = FutureProvider<List<KnowledgeBase>>((ref) async {
|
|||||||
DebugLogger.error('knowledge-bases-failed', scope: 'knowledge', error: e);
|
DebugLogger.error('knowledge-bases-failed', scope: 'knowledge', error: e);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
final knowledgeBaseItemsProvider =
|
final knowledgeBaseItemsProvider =
|
||||||
FutureProvider.family<List<KnowledgeBaseItem>, String>((ref, kbId) async {
|
FutureProvider.family<List<KnowledgeBaseItem>, String>((ref, kbId) async {
|
||||||
@@ -1637,7 +1639,8 @@ final knowledgeBaseItemsProvider =
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Audio providers
|
// Audio providers
|
||||||
final availableVoicesProvider = FutureProvider<List<String>>((ref) async {
|
@riverpod
|
||||||
|
Future<List<String>> availableVoices(Ref ref) async {
|
||||||
// Protected: require authentication
|
// Protected: require authentication
|
||||||
if (!ref.read(isAuthenticatedProvider2)) {
|
if (!ref.read(isAuthenticatedProvider2)) {
|
||||||
DebugLogger.log('skip-unauthed', scope: 'voices');
|
DebugLogger.log('skip-unauthed', scope: 'voices');
|
||||||
@@ -1652,12 +1655,11 @@ final availableVoicesProvider = FutureProvider<List<String>>((ref) async {
|
|||||||
DebugLogger.error('voices-failed', scope: 'voices', error: e);
|
DebugLogger.error('voices-failed', scope: 'voices', error: e);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
// Image Generation providers
|
// Image Generation providers
|
||||||
final imageModelsProvider = FutureProvider<List<Map<String, dynamic>>>((
|
@riverpod
|
||||||
ref,
|
Future<List<Map<String, dynamic>>> imageModels(Ref ref) async {
|
||||||
) async {
|
|
||||||
final api = ref.watch(apiServiceProvider);
|
final api = ref.watch(apiServiceProvider);
|
||||||
if (api == null) return [];
|
if (api == null) return [];
|
||||||
|
|
||||||
@@ -1667,4 +1669,4 @@ final imageModelsProvider = FutureProvider<List<Map<String, dynamic>>>((
|
|||||||
DebugLogger.error('image-models-failed', scope: 'image-models', error: e);
|
DebugLogger.error('image-models-failed', scope: 'image-models', error: e);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|||||||
@@ -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/models/prompt.dart';
|
||||||
import 'package:conduit/core/services/prompts_service.dart';
|
import 'package:conduit/core/services/prompts_service.dart';
|
||||||
|
|
||||||
final promptsListProvider = FutureProvider<List<Prompt>>((ref) async {
|
part 'prompts_providers.g.dart';
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
Future<List<Prompt>> promptsList(Ref ref) async {
|
||||||
final promptsService = ref.watch(promptsServiceProvider);
|
final promptsService = ref.watch(promptsServiceProvider);
|
||||||
if (promptsService == null) return const <Prompt>[];
|
if (promptsService == null) return const <Prompt>[];
|
||||||
return promptsService.getPrompts();
|
return promptsService.getPrompts();
|
||||||
});
|
}
|
||||||
|
|
||||||
final activePromptCommandProvider =
|
@riverpod
|
||||||
NotifierProvider<ActivePromptCommandNotifier, String?>(
|
class ActivePromptCommand extends _$ActivePromptCommand {
|
||||||
ActivePromptCommandNotifier.new,
|
|
||||||
);
|
|
||||||
|
|
||||||
class ActivePromptCommandNotifier extends Notifier<String?> {
|
|
||||||
@override
|
@override
|
||||||
String? build() => null;
|
String? build() => null;
|
||||||
|
|
||||||
|
|||||||
@@ -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/models/tool.dart';
|
||||||
import 'package:conduit/core/services/tools_service.dart';
|
import 'package:conduit/core/services/tools_service.dart';
|
||||||
|
|
||||||
final toolsListProvider = FutureProvider<List<Tool>>((ref) async {
|
part 'tools_providers.g.dart';
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
Future<List<Tool>> toolsList(Ref ref) async {
|
||||||
final toolsService = ref.watch(toolsServiceProvider);
|
final toolsService = ref.watch(toolsServiceProvider);
|
||||||
if (toolsService == null) return [];
|
if (toolsService == null) return [];
|
||||||
return await toolsService.getTools();
|
return await toolsService.getTools();
|
||||||
});
|
}
|
||||||
|
|
||||||
final selectedToolIdsProvider =
|
@riverpod
|
||||||
NotifierProvider<SelectedToolIdsNotifier, List<String>>(
|
class SelectedToolIds extends _$SelectedToolIds {
|
||||||
SelectedToolIdsNotifier.new,
|
|
||||||
);
|
|
||||||
|
|
||||||
class SelectedToolIdsNotifier extends Notifier<List<String>> {
|
|
||||||
@override
|
@override
|
||||||
List<String> build() => [];
|
List<String> build() => [];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user