79 lines
2.1 KiB
Dart
79 lines
2.1 KiB
Dart
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<void> build() {}
|
|
|
|
Future<User?> 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<void> build() {}
|
|
|
|
Future<User?> 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;
|
|
}
|
|
}
|