verifyPhoneNumber method
Implementation
Future<PhoneAuthCredential?> verifyPhoneNumber() async {
resultPin.value = '';
_timer?.cancel();
Completer<PhoneAuthCredential?> completer = Completer();
String phoneNumber = mobileNumTxtController.text.trim();
print("Verifying Phone Number: $phoneNumber");
await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: phoneNumber,
forceResendingToken: myResendToken,
verificationCompleted: (PhoneAuthCredential credential) {
print("✅ Auto verification completed.");
completer.complete(credential);
},
verificationFailed: (FirebaseAuthException e) {
print("❌ Phone verification failed: ${e.code} - ${e.message}");
String errorMessage;
switch (e.code) {
case 'invalid-phone-number':
errorMessage =
"The phone number entered is invalid. Please check and try again.";
break;
case 'too-short':
errorMessage =
"The phone number you entered is not valid. Please enter the correct one";
break;
case 'too-long':
errorMessage =
"The phone number you entered is not valid. Please enter the correct one";
break;
case 'quota-exceeded':
errorMessage = "SMS quota exceeded. Please try again later.";
break;
case 'network-request-failed':
errorMessage =
"Network error occurred. Check your internet connection and try again.";
break;
case 'session-expired':
errorMessage =
"The verification session expired. Please request a new code.";
break;
case 'captcha-check-failed':
errorMessage = "Captcha verification failed. Try again later.";
break;
case 'missing-client-identifier':
errorMessage =
"Client identifier is missing. Restart the app and try again.";
break;
default:
errorMessage = e.message ?? "Something went wrong. Try again.";
}
CustomFlashWidget.showFlashMessage(
type: FlashType.error,
title: "Verification Failed",
message: errorMessage,
);
completer.complete(null);
},
codeSent: (String verificationId, int? resendToken) async {
print("📩 Code sent! Verification ID: $verificationId");
_timer?.cancel();
myResendToken = resendToken;
myVerificationID = verificationId;
startTimer();
await OtpVerificationView.show(
barrierDismissible: false,
onConfirm: () {
closeDialog();
if(resultPin.value.isEmpty){
CustomFlashWidget.showFlashMessage(
title: "Error",
message: "Please enter the OTP sent to your phone number."
);
}
},
onResend: () {
resendOTP(phoneNumber);
},
);
if (resultPin.value != null && resultPin.value.isNotEmpty) {
PhoneAuthCredential credential = PhoneAuthProvider.credential(
verificationId: verificationId,
smsCode: resultPin.value,
);
completer.complete(credential);
} else {
completer.complete(null);
}
},
codeAutoRetrievalTimeout: (String verificationId) {
print("⏳ Auto retrieval timeout. Verification ID: $verificationId");
},
timeout: const Duration(seconds: 120),
);
return completer.future;
}