我在flutter中使用firebase进行电话认证,我定义了一个名为verification id的后期变量,这样当otp被发送时,它会被初始化,我可以稍后使用它,但它总是空的,为什么呢?
这是我的腕尺:
import 'package:bloc/bloc.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:meta/meta.dart';
part 'phone_auth_state.dart';
class PhoneAuthCubit extends Cubit<PhoneAuthState> {
late String verificationId;
PhoneAuthCubit() : super(PhoneAuthInitial());
Future<void> submitPhoneNumber(String phoneNumber) async {
emit(PhoneAuthLoading());
await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: '$phoneNumber',
timeout: const Duration(seconds: 14),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout,
);
}
void verificationCompleted(PhoneAuthCredential credential) async {
print('verificationCompleted');
await signIn(credential);
}
void verificationFailed(FirebaseAuthException error) {
print('verificationFailed : ${error.toString()}');
emit(PhoneAuthFailure(errorMessage: error.toString()));
}
void codeSent(String verificationId, int? resendToken) {
print('codeSent');
this.verificationId = verificationId;
emit(PhoneNumberSubmitted());
print("khlst code sent");
}
void codeAutoRetrievalTimeout(String verificationId) {
print('codeAutoRetrievalTimeout');
}
Future<void> submitOTP(String otpCode) async {
PhoneAuthCredential credential = PhoneAuthProvider.credential(
verificationId: this.verificationId, smsCode: otpCode);
await signIn(credential);
}
Future<void> signIn(PhoneAuthCredential credential) async {
try {
await FirebaseAuth.instance.signInWithCredential(credential);
emit(PhoneOTPVerified());
} catch (error) {
emit(PhoneAuthFailure(errorMessage: error.toString()));
}
}
Future<void> signOut() async {
await FirebaseAuth.instance.signOut();
}
User getLoggedInUser() {
User firebaseUser = FirebaseAuth.instance.currentUser!;
return firebaseUser;
}
}
字符串
在函数submitOTP中引发错误
1条答案
按热度按时间igsr9ssn1#
尝试在
codeAutoRetrievalTimeout
上分配verificationId:字符串