0

我目前正在使用 dartz 包设置电话号码验证。我的 firebase_auth_facade.dart 继承自 i_auth_facade.dart 但是当我尝试设置电话号码验证功能时,我收到错误:

“FirebaseAuthFacade.verifyAndLinkPhoneNumber' ('Future<Either<AuthFailure, Unit>> Function(String, String)') 不是 'IAuthFacade.verifyAndLinkPhoneNumber' ('Future<Either<AuthFailure, Unit>> Function({字符串 smsCode,字符串验证 ID})')。”

这是我的代码:

i_auth_facade.dart:

Future<Either<AuthFailure, Unit>> verifyAndLinkPhoneNumber({
  @required String verificationId,
  @required String smsCode,
});

firebase_auth_facade.dart:

@override
Future<Either<AuthFailure, Unit>> verifyAndLinkPhoneNumber(
    String verificationId, String smsCode) async {
  try {
    PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential(
        verificationId: verificationId, smsCode: smsCode);
    if (phoneAuthCredential == null) {
      return left((const AuthFailure.cancelledByUser()));
    }
    await _firebaseAuth.currentUser.linkWithCredential(phoneAuthCredential);
    return right(unit);
    } on FirebaseAuthException catch (_) {
    return left(const AuthFailure.serverError());
  }
}

有谁知道为什么后者不是有效的覆盖?谢谢!

4

1 回答 1

0

知道了。我忘了把构造函数用大括号括起来。firebase_auth_facade.dart 应该如下所示:

@override
Future<Either<AuthFailure, Unit>> verifyAndLinkPhoneNumber({
@required String smsCode,
@required String verificationId,
}) async {
try {
  final verificationIdStr = verificationId;
  final smsCodeStr = smsCode.getOrCrash();
  PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential(
      verificationId: verificationIdStr, smsCode: smsCodeStr);
  if (phoneAuthCredential == null) {
    return left((const AuthFailure.cancelledByUser()));
  }
  await _firebaseAuth.currentUser.linkWithCredential(phoneAuthCredential);
  return right(unit);
} on FirebaseAuthException catch (_) {
  return left(const AuthFailure.serverError());
}
于 2020-12-15T16:18:14.653 回答