Files
YungR1otz/lib/features/auth/presentation/providers/auth_providers.dart
2026-05-20 22:08:30 +01:00

81 lines
2.2 KiB
Dart

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<AuthService>((ref) {
final client = ref.watch(supabaseProvider);
return AuthService(client);
});
final authStateChangesProvider = StreamProvider<AuthState>((ref) {
final service = ref.watch(authServiceProvider);
return service.onAuthStateChange;
});
final currentSessionProvider = StreamProvider<Session?>((ref) async* {
final service = ref.watch(authServiceProvider);
yield service.currentSession;
await for (final event in service.onAuthStateChange) {
yield event.session;
}
});
final currentUserProvider = Provider<User?>((ref) {
final service = ref.watch(authServiceProvider);
return service.currentUser;
});
final authControllerProvider =
AutoDisposeAsyncNotifierProvider<AuthController, void>(
AuthController.new,
);
class AuthController extends AutoDisposeAsyncNotifier<void> {
@override
Future<void> build() async {}
Future<void> 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<void> 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<void> logout() async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
await ref.read(authServiceProvider).logout();
});
}
Future<void> forgotPassword(String email) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
await ref.read(authServiceProvider).forgotPassword(email.trim());
});
}
}