63 lines
1.8 KiB
Dart
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);
|
|
});
|
|
}
|
|
}
|