Files
Tanami_App/lib/features/securePin/presentation/bloc/pin_bloc.dart
2024-07-17 19:12:26 +05:30

121 lines
3.6 KiB
Dart

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:tanami_app/Api_Helper/base_manager.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import '../../../../core/utils/secure/secure_storage_service.dart';
import '../../Repository/PinAPIServices.dart';
part 'pin_event.dart';
part 'pin_state.dart';
class PinBloc extends Bloc<PinEvent, PinState> {
final SecureStorageService secureStorageService;
PinBloc({required this.secureStorageService})
: super(const PinState(
pin: '',
pinComplete: false,
isVerified: false,
error: '',
verifiedOnce: false)) {
on<NumberPressed>((event, emit) async {
final newPin = state.pin + event.number;
if (newPin.length <= 6) {
if ((event.fromscreen == "login" ||
event.fromscreen == "LoginedInUser") &&
newPin.length < 6) {
emit(state.copyWith(
pin: newPin,
pinComplete: newPin.length == 6,
error: '',
verifiedOnce: false,
));
} else {
if ((event.fromscreen != "login" &&
event.fromscreen != "LoginedInUser")) {
emit(state.copyWith(
pin: newPin,
pinComplete: newPin.length == 6,
error: '',
verifiedOnce: false,
));
}
}
if (newPin.length == 6) {
if (event.fromscreen == "confirmpin") {
add(VerifyPinPressed(newPin, event.fromscreen));
} else if (event.fromscreen == "login" ||
event.fromscreen == "LoginedInUser") {
add(VerifyLoginPinPressed(newPin, event.fromscreen));
}
}
}
});
on<BackspacePressed>((event, emit) {
if (state.pin.isNotEmpty) {
final newPin = state.pin.substring(0, state.pin.length - 1);
emit(state.copyWith(
pin: newPin,
pinComplete: newPin.length == 6,
error: '',
verifiedOnce: false));
}
});
on<SavePinPressed>((event, emit) async {
await secureStorageService.write('pin_code', state.pin);
});
on<VerifyPinPressed>((event, emit) async {
final storedPin = await secureStorageService.read('pin_code');
Map<String, dynamic> pindata = {
"token": await secureStorageService.read("temp_token"),
"masterPin": event.pin
};
if (storedPin == event.pin) {
ResponseData response = await PinAPIServices().ConfirmPin(pindata);
if (response.status == ResponseStatus.SUCCESS) {
await secureStorageService.write('userMPIN', storedPin.toString());
}
emit(state.copyWith(isVerified: true, error: '', verifiedOnce: true));
} else {
emit(state.copyWith(
isVerified: false,
error: AppText.incorrectPinCode,
verifiedOnce: true,
));
}
});
on<VerifyLoginPinPressed>((event, emit) async {
Map<String, dynamic> pindata = {
"token": await secureStorageService.read("temp_token"),
"masterPin": event.pin
};
ResponseData response = await PinAPIServices().Verifypin(pindata);
if (response.status == ResponseStatus.SUCCESS) {
emit(state.copyWith(
pinComplete: true,
pin: state.pin,
isVerified: true,
error: '',
verifiedOnce: false));
} else {
emit(state.copyWith(
pinComplete: true,
pin: state.pin,
isVerified: false,
error: "Incorrect Pin Code",
verifiedOnce: true,
));
}
});
}
}