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

时间:2021-06-14 15:42:16

标签: android firebase flutter dart asynchronous

所以我有这个功能所以注册电话认证:

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) ... 也不起作用......

由于我无法捕获异常,因此在控制台中出现此错误:

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

我想我抛出错误的方式有问题...

1 个答案:

答案 0 :(得分:0)

我认为catch永远不会被调用,但是你可以处理verificationFailed回调中的错误

并删除throw异常