import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../../../../core/logging/app_logger.dart'; import '../../../../core/network/dio_client.dart'; import '../../../../core/storage/secure_storage.dart'; import '../../data/datasources/auth_remote_source.dart'; import '../../data/repositories/auth_repository_impl.dart'; import '../../domain/entities/user.dart'; import '../../domain/repositories/auth_repository.dart'; part 'auth_providers.g.dart'; @Riverpod(keepAlive: true) AuthRemoteSource authRemoteSource(Ref ref) { final dio = ref.read(dioProvider); return AuthRemoteSource(dio); } @Riverpod(keepAlive: true) AuthRepository authRepository(Ref ref) { return AuthRepositoryImpl( remoteSource: ref.read(authRemoteSourceProvider), secureStorage: ref.read(secureStorageProvider), talker: ref.read(appLoggerProvider), ); } @riverpod class LoginNotifier extends _$LoginNotifier { @override FutureOr build() {} Future login({ required String email, required String password, }) async { state = const AsyncLoading(); final result = await AsyncValue.guard(() async { final repository = ref.read(authRepositoryProvider); return repository.login(email: email, password: password); }); state = result.hasError ? AsyncError(result.error!, result.stackTrace!) : const AsyncData(null); return result.valueOrNull; } } @riverpod class RegisterNotifier extends _$RegisterNotifier { @override FutureOr build() {} Future register({ required String email, required String password, required String name, }) async { state = const AsyncLoading(); final result = await AsyncValue.guard(() async { final repository = ref.read(authRepositoryProvider); return repository.register( email: email, password: password, name: name, ); }); state = result.hasError ? AsyncError(result.error!, result.stackTrace!) : const AsyncData(null); return result.valueOrNull; } }