import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import '../../../../core/supabase/supabase_providers.dart'; import '../../data/services/auth_service.dart'; final authServiceProvider = Provider((ref) { final client = ref.watch(supabaseProvider); return AuthService(client); }); final authStateChangesProvider = StreamProvider((ref) { final service = ref.watch(authServiceProvider); return service.onAuthStateChange; }); final currentSessionProvider = StreamProvider((ref) async* { final service = ref.watch(authServiceProvider); yield service.currentSession; await for (final event in service.onAuthStateChange) { yield event.session; } }); final currentUserProvider = Provider((ref) { final service = ref.watch(authServiceProvider); return service.currentUser; }); final authControllerProvider = AutoDisposeAsyncNotifierProvider( AuthController.new, ); class AuthController extends AutoDisposeAsyncNotifier { @override Future build() async {} Future signup({ required String email, required String password, required String username, }) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(authServiceProvider).signUp( email: email.trim(), password: password, username: username.trim(), ); }); } Future login({ required String email, required String password, }) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(authServiceProvider).login( email: email.trim(), password: password, ); }); } Future logout() async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(authServiceProvider).logout(); }); } Future forgotPassword(String email) async { state = const AsyncLoading(); state = await AsyncValue.guard(() async { await ref.read(authServiceProvider).forgotPassword(email.trim()); }); } }