otpLogin method

Future<FirebaseAuth> otpLogin(
  1. String mobile,
  2. BuildContext context
)

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;
}