main
dart 51 lines 1.45 KB
Raw
1 import 'package:flutter_riverpod/flutter_riverpod.dart';
2
3 import '../../../core/providers/storage_providers.dart';
4 import '../data/model_metadata_repository.dart';
5
6 final modelMetadataRepositoryProvider = Provider<ModelMetadataRepository>((
7 ref,
8 ) {
9 return ModelMetadataRepository(ref.watch(sharedPreferencesProvider));
10 });
11
12 final modelMetadataProvider =
13 NotifierProvider<ModelMetadataNotifier, Map<String, ModelMetadata>>(() {
14 return ModelMetadataNotifier();
15 });
16
17 class ModelMetadataNotifier extends Notifier<Map<String, ModelMetadata>> {
18 String? _serverId;
19
20 @override
21 Map<String, ModelMetadata> build() {
22 return {};
23 }
24
25 void loadForServer(String serverId) {
26 _serverId = serverId;
27 if (!ref.mounted) return;
28 state = ref.read(modelMetadataRepositoryProvider).getAllForServer(serverId);
29 }
30
31 Future<void> toggleFavorite(String modelId) async {
32 final serverId = _serverId;
33 if (serverId == null) return;
34 final current = state[modelId]?.isFavorite ?? false;
35 await ref
36 .read(modelMetadataRepositoryProvider)
37 .setFavorite(serverId, modelId, !current);
38 if (!ref.mounted) return;
39 loadForServer(serverId);
40 }
41
42 Future<void> setNote(String modelId, String? note) async {
43 final serverId = _serverId;
44 if (serverId == null) return;
45 await ref
46 .read(modelMetadataRepositoryProvider)
47 .setNote(serverId, modelId, note);
48 if (!ref.mounted) return;
49 loadForServer(serverId);
50 }
51 }