import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../backend/backend.dart'; import '../../../core/utils/result.dart'; final collectionsControllerProvider = AsyncNotifierProvider>( CollectionsController.new, ); class CollectionsController extends AsyncNotifier> { @override Future> build() => _load(); Future create(String name, String? description) async { await ref .read(collectionServiceProvider) .createCollection(name, description); state = AsyncData(await _load()); } Future updateCollection( String id, { required String name, String? description, String? coverUrl, }) async { await ref.read(collectionServiceProvider).updateCollection( id, name: name, description: description, coverUrl: coverUrl, ); state = AsyncData(await _load()); } Future delete(String id) async { await ref.read(collectionServiceProvider).deleteCollection(id); ref.invalidate(collectionPostsProvider(id)); state = AsyncData(await _load()); } Future> _load() async { final result = await ref.read(collectionServiceProvider).getCollections(); return result is Success> ? result.data : const []; } } final collectionPostsProvider = FutureProvider.family, String>((ref, collectionId) async { final result = await ref .watch(collectionServiceProvider) .getCollectionPosts(collectionId); return result is Success> ? result.data : const []; });