Firebase_auth - 用于空值的空检查运算符

时间:2021-04-14 23:03:05

标签: firebase flutter firebase-authentication

我已经解决了所有类似的问题,但没有一个与我的问题类似。 我有以下功能,用于在 FirebaseAuth 实例上使用 verifyPhoneNumber() 验证 OTP 发送的手机号码。

Future<User?> manualVerification(code) async { 
  try { 
    await _firebaseAuth .signInWithCredential(
      PhoneAuthProvider.credential( verificationId: _verificationCode, smsCode: code, )) 
      .then((value) async { 
        if (value.user != null) { 
          print("User not null"); 
          print("user ${value.user}"); 
          return value.user; 
        } else { 
          print("User null!");
        } 
      }).catchError((err) { 
        print("manual verification Failed: $err"); return err; }); 
    } catch (e) { 
      print("manualVerification Catch| $e"); 
    } 
  }

但是,一旦函数被调用并完成,我会按预期在控制台中得到“用户非空”。 但我也得到“在空值上使用的空检查运算符”和“类型 '_CastError' 不是类型 'FutureOr' 的子类型”。 该函数也为 Value.user 返回 null。但用户是在 Firebase 控制台上创建的。

到目前为止,我已将函数修改为:

Future<User?> manualVerification(code) async {
    try {
      PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential(
        verificationId: _verificationCode,
        smsCode: code,
      );
      final authCredential =
          await _firebaseAuth.signInWithCredential(phoneAuthCredential);

      if (authCredential.user != null) {
        print("Got User");
        print("${authCredential.user!.uid}");
        return authCredential.user;
      }
    } on FirebaseException catch (e) {
      print("manualVerification Catch| ${e.message}");
    }
  }

虽然该函数打印用户的 uid,但我收到此错误:

[VERBOSE-2:ui_dart_state.cc(186)] Unhandled Exception: Null check operator used on a null value
#0      UserInfo.uid (package:firebase_auth_platform_interface/src/user_info.dart:52:24)
#1      UserInfo.toString (package:firebase_auth_platform_interface/src/user_info.dart:57:144)
#2      StringBuffer.write (dart:core-patch/string_buffer_patch.dart:64:22)
#3      StringBuffer.writeAll (dart:core-patch/string_buffer_patch.dart:102:7)
#4      IterableBase.iterableToFullString (dart:collection/iterable.dart:267:14)
#5      ListBase.listToString (dart:collection/list.dart:43:20)
#6      List.toString (dart:core-patch/growable_array.dart:489:33)
#7      _StringBase._interpolate (dart:core-patch/string_patch.dart:855:19)
#8      User.toString (package:firebase_auth/src/user.dart:357:5)
#9      _StringBase._interpolate (dart:core-patch/string_patch.dart:855:19)
#10     AuthViewModel.verifyPin (package:sxxxxx/ui/auth/auth_viewmodel.dart:81:29)

我用 firebase_auth 尝试了相同的代码:^1.0.3 和 ^1.1.0 我使用的是 Flutter 2.0.4 • 通道稳定。

请帮忙

1 个答案:

答案 0 :(得分:0)

更新您的 Firebase 身份验证版本。 这解决了我的问题