【发布时间】:2021-05-20 01:13:55
【问题描述】:
Firebase Phone authentication in flutter,
Phone authentication code was working perfectly for flutter firebase plugins- `firebase_auth: ^0.14.0+5`, `firebase_core: ^0.4.0+9`, `cloud_firestore: ^0.13.0+1
Now updated to- `firebase_auth: ^0.20.0+1`, `firebase_core: ^0.7.0`, `cloud_firestore: ^0.16.0`
its throwing error:
> Unhandled Exception: 'package:firebase_auth/src/firebase_auth.dart': Failed assertion: line 633 pos 12: 'codeAutoRetrievalTimeout != null': is not true
My Code
//Firebase Phone auth code
Future<bool> loginUser(String phone ,BuildContext context) async{
FirebaseAuth _auth = FirebaseAuth.instance;
final prefs = await SharedPreferences.getInstance();
String name = prefs.getString('roleName');
final bloc = BlocProvider.of<AppRrgisterationScreenBloc>(context);
_auth.verifyPhoneNumber(
// phoneNumber: phone,
phoneNumber: '+91${phone}',
timeout: Duration(seconds: 0),
verificationCompleted: (AuthCredential credential) async{
Navigator.of(context).pop();
UserCredential result = await _auth.signInWithCredential(credential);
User user = result.user;
if(user != null){
contactnumberVal=phone;
validateAndCreateData(bloc,context);
}else{
print("Error");
}
//This callback would gets called when verification is done automaticlly
},
verificationFailed: (FirebaseAuthException exception){
print(exception);
},
codeSent: (String verificationId, [int forceResendingToken]){
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
title: Text("Please enter the verification code sent to the mobile number and select Confirm",style: TextStyle(
fontSize: 16.0,
)),
content:Form(
key: _resetKey,
autovalidate: _validate,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextFormField(
keyboardType: TextInputType.number,
controller: verificationcode,
),
],
),
),
actions: <Widget>[
showErrorMessageVerificationCode ?
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(80.0)
),
child: Padding(
padding: EdgeInsets.all(10.0),
child: Text('Code is Requried!',style: TextStyle(color:Color( 0xFFE9140B),fontSize: 16.0),)
)
)
: Container(),
SizedBox(height: 5.0),
FlatButton(
child: Text("Cancel"),
textColor: Colors.white,
color: Color(0xFFE9140B),
onPressed: () => Navigator.pop(context),
),
FlatButton(
child: Text("Confirm"),
textColor: Colors.white,
color: Color(0xFFE9140B),
onPressed: () async{
final code = verificationcode.text.trim();
AuthCredential credential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: code);
_auth.signInWithCredential();
UserCredential result = await _auth.signInWithCredential(credential).catchError((error) {
print("error");
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(
builder: (context) => MobileAuthFails(names:name,phone:phone,)
),
ModalRoute.withName(""));
});
//Role base sign up
User user = result.user;
if(user != null){
contactnumberVal=phone;
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('reg_number', phone);
prefs.setString('phoneNumber', phone);
validateAndCreateData(bloc,context);
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(
builder: (context) =>
MyAppEligiblity(phone:phone)
// ResetPassword(user: user,)
),
ModalRoute.withName(""));
prefs.setBool('IsLogin', true);
}
else{
print("error");
}
},
)
],
);
}
);
},
codeAutoRetrievalTimeout: null,
// codeAutoRetrievalTimeout: (String verificationId){
// verificationId = verificationId;
// print(verificationId);
// print("Timout"); }
);
}
1.verificationCompleted:自动处理Android设备上的短信代码。
2.verificationFailed:处理电话号码无效或是否超出短信配额等失败事件。
3.codeSent:当Firebase向设备发送代码时处理,用于提示用户输入代码。
4.codeAutoRetrievalTimeout:自动短信代码处理失败时的超时处理。
【问题讨论】:
-
请在进行身份验证的地方分享您的代码。
-
我已经发布了代码@PreetShah
标签: flutter