所以我有这个功能,所以用电话身份验证注册:
Future<AuthResults?> authenticateWithPhoneNumber({
required BuildContext context,
required Widget navigateTo,
required String number
}) async {
try {
await _firebaseAuth.verifyPhoneNumber(
phoneNumber: '+33$number',
timeout: const Duration(minutes: 2),
verificationCompleted: (PhoneAuthCredential credentials) async {
await _firebaseAuth.signInWithCredential(credentials);
navigate(
context,
navigateTo
);
},
verificationFailed: (FirebaseAuthException err) { // errors go here. why can't I catch it???
print('failed');
throw FirebaseAuthException(code: err.message ?? 'Something went wrong');
},
codeSent: (String verificationId, int? resendToken) {
navigate(
context,
VerifyCode(
verificationId: verificationId,
resendToken: resendToken
)
);
},
codeAutoRetrievalTimeout: (String verificationId) {}
);
} on FirebaseAuthException catch (err) {
print('here'); // never gets executed
// return AuthResults(
// success: false,
// error: true,
// message: err.message ?? 'Something went wrong...'
// );
}
}
我完全不知道这里发生了什么。即使有一个简单的... catch (err) ...
而不指定Exception类型也不起作用。。。
由于我无法捕捉到异常,我在控制台中收到以下错误:
E/FirebaseAuth( 645): [SmsRetrieverHelper] SMS verification code request failed: unknown status code: 17042 Invalid format.
I/flutter ( 645): failed <--- there's my print()
E/flutter ( 645): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: [firebase_auth/The format of the phone number provided is incorrect. Please enter the phone number in a format that can be parsed into E.164 format. E.164 phone numbers are written in the format [+][country code][subscriber number including area code]. [ Invalid format. ]] null
E/flutter ( 645): #0 AuthenticationService.authenticateWithPhoneNumber.<anonymous closure> (package:semeru/packages/authentication/service.dart:36:11)
E/flutter ( 645): #1 MethodChannelFirebaseAuth.verifyPhoneNumber.<anonymous closure> (package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart:570:29)
E/flutter ( 645): #2 _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter ( 645): #3 _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter ( 645): #4 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter ( 645): #5 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter ( 645): #6 _DelayedData.perform (dart:async/stream_impl.dart:591:14)
E/flutter ( 645): #7 _StreamImplEvents.handleNext (dart:async/stream_impl.dart:706:11)
E/flutter ( 645): #8 _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:663:7)
E/flutter ( 645): #9 _rootRun (dart:async/zone.dart:1346:47)
E/flutter ( 645): #10 _CustomZone.run (dart:async/zone.dart:1258:19)
E/flutter ( 645): #11 _CustomZone.runGuarded (dart:async/zone.dart:1162:7)
E/flutter ( 645): #12 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1202:23)
E/flutter ( 645): #13 _rootRun (dart:async/zone.dart:1354:13)
E/flutter ( 645): #14 _CustomZone.run (dart:async/zone.dart:1258:19)
E/flutter ( 645): #15 _CustomZone.runGuarded (dart:async/zone.dart:1162:7)
E/flutter ( 645): #16 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1202:23)
E/flutter ( 645): #17 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
E/flutter ( 645): #18 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
E/flutter ( 645):
W/BpBinder( 645): Slow Binder: BpBinder transact took 271 ms, interface=com.google.android.gms.auth.api.phone.internal.ISmsRetrieverApiService, code=1 oneway=false
我想我抛出错误的方式有问题。。。
我认为catch永远不会被调用,但您可以处理verificationFailed回调中的错误
并删除抛出异常