otpLogin method
Initiates a phone number authentication using OTP.
Displays a dialog for the user to enter the SMS code sent to their phone. Handles the completion, failure, and timeout of the OTP verification process.
Implementation
Future<FirebaseAuth> otpLogin(String mobile, BuildContext context) async {
FirebaseAuth _auth = FirebaseAuth.instance;
final _codeController = TextEditingController();
await _auth.verifyPhoneNumber(
phoneNumber: mobile,
timeout: const Duration(seconds: 60),
verificationCompleted: (AuthCredential authCredential) async {
await _auth.signInWithCredential(authCredential);
},
verificationFailed: (FirebaseAuthException authException) {
print(authException.message);
},
codeSent: (String verificationId, int? forceResendingToken) {
showDialog(
context: context,
barrierDismissible: true,
builder: (context) => AlertDialog(
title: const Text("Enter SMS Code"),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextField(controller: _codeController),
],
),
actions: <Widget>[
ElevatedButton(
child: const Text("Done"),
onPressed: () async {
FirebaseAuth auth = FirebaseAuth.instance;
var smsCode = _codeController.text.trim();
PhoneAuthCredential _credential =
PhoneAuthProvider.credential(
verificationId: verificationId,
smsCode: smsCode);
await auth.signInWithCredential(_credential);
print("OTP Login Successful");
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text("OTP Login Successful")));
},
)
],
));
},
codeAutoRetrievalTimeout: (String verificationId) {
verificationId = verificationId;
print("Timout");
});
return _auth;
}