颤振 - 无法捕获 Firebase 身份验证异常



所以我有这个功能,所以用电话身份验证注册:

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回调中的错误

并删除抛出异常

相关内容

最新更新