Files
YungR1otz/lib/features/feed/presentation/providers/feed_providers.dart
Lucas Saburido cabf2025cd first commit
2026-05-13 16:26:45 +01:00

63 lines
1.8 KiB
Dart

import 'dart:typed_data';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../../core/supabase/supabase_providers.dart';
import '../../data/services/feed_service.dart';
import '../../domain/models/feed_post_model.dart';
final feedServiceProvider = Provider<FeedService>((ref) {
final client = ref.watch(supabaseProvider);
return FeedService(client);
});
final feedPostsProvider = FutureProvider<List<FeedPostModel>>((ref) {
return ref.watch(feedServiceProvider).fetchFeed();
});
final feedControllerProvider =
AutoDisposeAsyncNotifierProvider<FeedController, void>(
FeedController.new,
);
class FeedController extends AutoDisposeAsyncNotifier<void> {
@override
Future<void> build() async {}
Future<void> createPost({
required String caption,
required Uint8List imageBytes,
required String extension,
}) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
await ref.read(feedServiceProvider).createPost(
caption: caption,
imageBytes: imageBytes,
extension: extension,
);
ref.invalidate(feedPostsProvider);
});
}
Future<void> toggleLike(FeedPostModel post) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
await ref.read(feedServiceProvider).toggleLike(
postId: post.id,
currentlyLiked: post.isLiked,
currentLikesCount: post.likesCount,
);
ref.invalidate(feedPostsProvider);
});
}
Future<void> deleteOwnPost(String postId) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
await ref.read(feedServiceProvider).deleteOwnPost(postId);
ref.invalidate(feedPostsProvider);
});
}
}