Files
forkmessager/client-mobile/lib/features/auth/presentation/bloc/auth_bloc.dart
2026-05-14 12:06:34 +03:00

60 lines
2.3 KiB
Dart

import 'package:flutter_bloc/flutter_bloc.dart';
import '../../domain/repositories/auth_repository.dart';
import 'auth_event.dart';
import 'auth_state.dart';
class AuthBloc extends Bloc<AuthEvent, AuthState> {
final AuthRepository authRepository;
AuthBloc({required this.authRepository}) : super(const AuthState.initial()) {
on<AuthEventStarted>(_onStarted);
on<AuthEventLoginRequested>(_onLoginRequested);
on<AuthEventRegisterRequested>(_onRegisterRequested);
on<AuthEventLogoutRequested>(_onLogoutRequested);
on<AuthEventAuthChecked>(_onAuthChecked);
on<AuthEventUsernameChanged>(_onUsernameChanged);
on<AuthEventPasswordChanged>(_onPasswordChanged);
on<AuthEventNameChanged>(_onNameChanged);
}
Future<void> _onStarted(AuthEventStarted event, Emitter<AuthState> emit) async {
add(const AuthEvent.authChecked());
}
Future<void> _onLoginRequested(AuthEventLoginRequested event, Emitter<AuthState> emit) async {
emit(const AuthState.loading());
final result = await authRepository.login(event.username, event.password);
result.fold(
(error) => emit(AuthState.error('loginFailed')),
(user) => emit(AuthState.authenticated(user.id)),
);
}
Future<void> _onRegisterRequested(AuthEventRegisterRequested event, Emitter<AuthState> emit) async {
emit(const AuthState.loading());
final result = await authRepository.register(event.username, event.password, event.name);
result.fold(
(error) => emit(AuthState.error('registrationFailed')),
(user) => emit(AuthState.authenticated(user.id)),
);
}
Future<void> _onLogoutRequested(AuthEventLogoutRequested event, Emitter<AuthState> emit) async {
emit(const AuthState.loading());
await authRepository.logout();
emit(const AuthState.unauthenticated());
}
Future<void> _onAuthChecked(AuthEventAuthChecked event, Emitter<AuthState> emit) async {
final result = await authRepository.getCurrentUser();
result.fold(
(error) => emit(const AuthState.unauthenticated()),
(user) => emit(AuthState.authenticated(user.id)),
);
}
void _onUsernameChanged(AuthEventUsernameChanged event, Emitter<AuthState> emit) {}
void _onPasswordChanged(AuthEventPasswordChanged event, Emitter<AuthState> emit) {}
void _onNameChanged(AuthEventNameChanged event, Emitter<AuthState> emit) {}
}