first commit
This commit is contained in:
59
lib/features/feed/presentation/providers/post_providers.dart
Normal file
59
lib/features/feed/presentation/providers/post_providers.dart
Normal file
@@ -0,0 +1,59 @@
|
||||
import 'dart:typed_data';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../../../../core/supabase/supabase_providers.dart';
|
||||
import '../../data/services/post_service.dart';
|
||||
import '../../domain/models/feed_post_model.dart';
|
||||
|
||||
final postServiceProvider = Provider<PostService>((ref) {
|
||||
final client = ref.watch(supabaseProvider);
|
||||
return PostService(client);
|
||||
});
|
||||
|
||||
final feedPostsProvider = FutureProvider<List<FeedPostModel>>((ref) {
|
||||
return ref.watch(postServiceProvider).fetchFeed();
|
||||
});
|
||||
|
||||
final postControllerProvider = AutoDisposeAsyncNotifierProvider<PostController, void>(
|
||||
PostController.new,
|
||||
);
|
||||
|
||||
class PostController 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(postServiceProvider).uploadPost(
|
||||
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(postServiceProvider).toggleLike(
|
||||
postId: post.id,
|
||||
currentlyLiked: post.isLiked,
|
||||
currentLikesCount: post.likesCount,
|
||||
);
|
||||
ref.invalidate(feedPostsProvider);
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deletePost(String postId) async {
|
||||
state = const AsyncLoading();
|
||||
state = await AsyncValue.guard(() async {
|
||||
await ref.read(postServiceProvider).deletePost(postId);
|
||||
ref.invalidate(feedPostsProvider);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user