Files
Tanami_App/lib/features/otpVerification/presentation/bloc/otp_bloc.dart
2024-07-26 16:54:11 +05:30

64 lines
2.0 KiB
Dart

// otp_bloc.dart
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:sms_autofill/sms_autofill.dart';
import 'package:tanami_app/Api_Helper/base_manager.dart';
import 'package:tanami_app/core/utils/secure/secure_storage_service.dart';
import '../../domain/Repository/otp_api.dart';
import 'otp_event.dart';
import 'otp_state.dart';
class OtpBloc extends Bloc<OtpEvent, OtpState> {
final SharedPreferenceLocalData secureStorageService;
final TextEditingController otpController = TextEditingController();
OtpBloc({required this.secureStorageService}) : super(OtpInitial()) {
on<StartListeningForOtp>(_onStartListeningForOtp);
on<OtpCodeChanged>(_onOtpCodeChanged);
on<OtpSubmit>(_onOtpSubmit);
}
void _onStartListeningForOtp(
StartListeningForOtp event, Emitter<OtpState> emit) {
_startListening();
}
void _onOtpCodeChanged(OtpCodeChanged event, Emitter<OtpState> emit) {
emit(OtpCodeReceived(event.code));
if (event.code.length == 6) {
add(OtpSubmit(event.code));
}
}
void _onOtpSubmit(OtpSubmit event, Emitter<OtpState> emit) async {
emit(OtpSubmitting());
try {
Map<String, dynamic> otpdata = {
"code": await secureStorageService.read("temp_token"),
"otp": otpController.text
};
ResponseData response = await OTPAPI().verifyOTP(otpdata);
// Add your OTP verification logic here
// await Future.delayed(const Duration(seconds: 2));
if (response.status == ResponseStatus.SUCCESS) {
emit(OtpSubmissionSuccess());
} else {
emit(const OtpSubmissionFailure("Otp Invalid !"));
} // Simulate network call
} catch (e) {
emit(OtpSubmissionFailure(e.toString()));
}
}
void _startListening() {
SmsAutoFill().listenForCode(); // Correctly call listenForCode
}
@override
Future<void> close() {
otpController.dispose();
SmsAutoFill().unregisterListener();
return super.close();
}
}