Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
authentication_bloc.dart
Go to the documentation of this file.
1import 'package:equatable/equatable.dart';
2import 'package:firebase_messaging/firebase_messaging.dart';
3import 'package:flutter_bloc/flutter_bloc.dart';
4
5import '../../../../../core/common/use_cases/use_cases.dart';
6import '../../../../../core/errors/failures.dart';
7import '../../../../../core/services/notification_service.dart';
8import '../../../../../core/services/service_locator.dart';
9import '../../../domain/entities/credentials_entity.dart';
10import '../../../domain/entities/session_entity.dart';
11import '../../../domain/use_cases/chec_biometric_auth_availability_usecase.dart';
12import '../../../domain/use_cases/load_credentials_usecase.dart';
13import '../../../domain/use_cases/load_session_usecase.dart';
14import '../../../domain/use_cases/signin_usecases.dart';
15import '../../../domain/use_cases/signout_usecase.dart';
16
17part 'authentication_event.dart';
18part 'authentication_state.dart';
19
21 extends Bloc<AuthenticationEvent, AuthenticationState> {
28
29 AuthenticationBloc() : super(AuthenticationInitialState()) {
30 on<SignInEvent>(_onSignInEvent);
31 on<SignOutEvent>(_onSignOutEvent);
32 on<LoadCredentialsEvent>(_onLoadCredentialsEvent);
33 on<LoadSessionEvent>(_onLoadSessionEvent);
34 on<CheckBiometricAuthenticationAvailabilityEvent>(
36 on<LoadEmailEvent>(_onloadEmailEvent);
37 }
38
39 Future<void> _onloadEmailEvent(
40 LoadEmailEvent event,
41 Emitter<AuthenticationState> emit,
42 ) async {
43 final results = await _loadUserCredentialsUseCase.call(NoParams());
44 results.fold(
46 (credentials) => emit(EmailLoadedState(email: credentials?.email)),
47 );
48 }
49
50 Future<void> _onSignInEvent(
51 SignInEvent event,
52 Emitter<AuthenticationState> emit,
53 ) async {
54 emit(AuthenticatingState());
55 final results = await _signInUseCase.call(event.reqEntity);
56 await results.fold(
58 (session) async {
59 if (!emit.isDone) {
61 emit(AuthenticatedState(session: session));
62 }
63 },
64 );
65 }
66
67 Future<void> _onLoadSessionEvent(
68 LoadSessionEvent event,
69 Emitter<AuthenticationState> emit,
70 ) async {
71 final results = await _loadSessionUseCase.call(NoParams());
72 await results.fold(
74 (session) async {
75 if (!emit.isDone) {
76 if (session != null) {
78 emit(AuthenticatedState(session: session));
79 } else {
80 emit(UnauthenticatedState());
81 }
82 }
83 },
84 );
85 }
86
87 Future<void> _onSignOutEvent(
88 SignOutEvent event,
89 Emitter<AuthenticationState> emit,
90 ) async {
91 final results = await _signOutUseCase.call(NoParams());
92 await results.fold(
94 (_) async {
95 if (!emit.isDone) {
96 final notificationService = NotificationService();
97 final token = await FirebaseMessaging.instance.getToken();
98 if (token != null) {
99 await notificationService.removeDeviceToken(token);
100 }
101 notificationService.updateSession(null);
102 emit(UnauthenticatedState());
103 }
104 },
105 );
106 }
107
109 LoadCredentialsEvent event,
110 Emitter<AuthenticationState> emit,
111 ) async {
112 final results = await _loadUserCredentialsUseCase.call(NoParams());
113 results.fold(
116 );
117 }
118
120 CheckBiometricAuthenticationAvailabilityEvent event,
121 Emitter<AuthenticationState> emit,
122 ) async {
123 final results =
124 await _checkBiometricAuthAvailabilityUseCase.call(NoParams());
125 results.fold(
126 (failure) => emit(BiometricAuthUnavailable()),
127 (isAvailable) {
128 emit(
129 isAvailable ? BiometricAuthAvailable() : BiometricAuthUnavailable(),
130 );
131 },
132 );
133 }
134}
const SignInEvent({required this.reqEntity})
final class AuthenticatedState extends AuthenticationState credentials
const CredentialsLoadedState({required this.credentials})
const AuthenticationFailureState({required this.failure})
Future< void > _onCheckBiometricAuthenticationAvailabilityEvent(CheckBiometricAuthenticationAvailabilityEvent event, Emitter< AuthenticationState > emit,) async
Future< void > _onLoadCredentialsEvent(LoadCredentialsEvent event, Emitter< AuthenticationState > emit,) async
Future< void > _onloadEmailEvent(LoadEmailEvent event, Emitter< AuthenticationState > emit,) async
Future< void > _onSignInEvent(SignInEvent event, Emitter< AuthenticationState > emit,) async
Future< void > _onLoadSessionEvent(LoadSessionEvent event, Emitter< AuthenticationState > emit,) async
Future< void > _onSignOutEvent(SignOutEvent event, Emitter< AuthenticationState > emit,) async
Future< void > setupAfterAuthentication(SessionEntity session) async
sealed class DocumentState extends Equatable failure
final sl