first commit
This commit is contained in:
73
lib/modules/auth/login/bloc/login_cubit.dart
Normal file
73
lib/modules/auth/login/bloc/login_cubit.dart
Normal file
@@ -0,0 +1,73 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:frontend_eccp_mobile/app/core/di/injection.dart';
|
||||
import 'package:frontend_eccp_mobile/app/core/services/crashlytics_service.dart';
|
||||
import 'package:frontend_eccp_mobile/app/core/utils/session_manager.dart';
|
||||
import 'package:frontend_eccp_mobile/modules/auth/login/bloc/login_state.dart';
|
||||
import 'package:frontend_eccp_mobile/modules/auth/login/data/model/login_request.dart';
|
||||
import 'package:frontend_eccp_mobile/modules/auth/login/data/model/user_session.dart';
|
||||
import 'package:frontend_eccp_mobile/modules/auth/login/data/repositories/login_repository.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
@injectable
|
||||
class LoginCubit extends Cubit<LoginState> {
|
||||
LoginCubit(this._repository) : super(LoginInitial());
|
||||
|
||||
final LoginRepository _repository;
|
||||
|
||||
Future<void> login({
|
||||
required String nrp,
|
||||
required String password,
|
||||
}) async {
|
||||
emit(LoginLoading());
|
||||
|
||||
try {
|
||||
final response = await _repository.login(
|
||||
LoginRequest(
|
||||
nrp: nrp,
|
||||
password: password,
|
||||
),
|
||||
);
|
||||
|
||||
if (response.status != 'success') {
|
||||
emit(LoginFailure(response.message));
|
||||
return;
|
||||
}
|
||||
|
||||
await CrashlyticsService.setUser(
|
||||
id: response.data.user.nrp,
|
||||
nrp: response.data.user.nrp,
|
||||
name: response.data.user.name,
|
||||
);
|
||||
|
||||
await SessionManager.saveToken(response.data.accessToken);
|
||||
await SessionManager.saveRefreshToken(response.data.refreshToken);
|
||||
|
||||
final userMap = {
|
||||
'name': response.data.user.name,
|
||||
'nrp': response.data.user.nrp,
|
||||
};
|
||||
|
||||
await SessionManager.saveUser(userMap);
|
||||
|
||||
final _ = getIt<UserSession>()
|
||||
..token = response.data.accessToken
|
||||
..user = userMap;
|
||||
|
||||
emit(LoginSuccess());
|
||||
} on DioException catch (e) {
|
||||
final handled = e.requestOptions.extra['handledGlobally'] == true;
|
||||
if (handled) return;
|
||||
emit(LoginFailure(e.error?.toString()));
|
||||
} catch (e, s) {
|
||||
await CrashlyticsService.recordError(
|
||||
e,
|
||||
s,
|
||||
fatal: true,
|
||||
reason: 'Login Unknown Error',
|
||||
);
|
||||
|
||||
emit(const LoginFailure('Terjadi kesalahan saat login'));
|
||||
}
|
||||
}
|
||||
}
|
||||
32
lib/modules/auth/login/bloc/login_state.dart
Normal file
32
lib/modules/auth/login/bloc/login_state.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:frontend_eccp_mobile/app/core/constants/enum/snackbar_type_enum.dart';
|
||||
|
||||
abstract class LoginState extends Equatable {
|
||||
const LoginState();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class LoginInitial extends LoginState {}
|
||||
|
||||
class LoginLoading extends LoginState {}
|
||||
|
||||
class LoginSuccess extends LoginState {}
|
||||
|
||||
class LoginFailure extends LoginState {
|
||||
const LoginFailure([
|
||||
this.message,
|
||||
this.snackBarType = SnackBarType.error,
|
||||
this.duration = 2000,
|
||||
]);
|
||||
|
||||
final String? message;
|
||||
final SnackBarType snackBarType;
|
||||
final int duration;
|
||||
|
||||
bool get hasMessage => message != null && message!.isNotEmpty;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [message, snackBarType, duration];
|
||||
}
|
||||
Reference in New Issue
Block a user