firebase 正文可能正常完成,导致返回“null”,但返回类型"FutureOr< UserCredential>“可能是不可为null的类型

wbrvyc0a  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(130)

我正在构建一个flutter应用程序,我试图创建一个方法,使用户能够在Firebase中注册,并将他们的数据存储在Firestore中。我收到一个错误,其中的身体返回空。我知道该方法必须返回用户凭据,但我有点卡住了。请任何人帮助。
下面是我的代码:

void validateAndSubmit() async {
    if (validateAndSave()) {
      try {
        UserCredential userCredential = await FirebaseAuth.instance
            .createUserWithEmailAndPassword(email: _email, password: _password)
            .then((userCredential) {
          FirebaseFirestore.instance.collection('users').doc(userCredential.user!.uid).set({
            "uid": userCredential.user!.uid,
            'Name': _name,
            'userName': _userName,
            'email': _email,
          });
        }
        );
        Navigator.pushNamed(context, '/home');
        print('Registered user: ${userCredential.user}');
        const snackBar =
            SnackBar(content: Text('User has been successfully registered!'));
        ScaffoldMessenger.of(context).showSnackBar(snackBar);
      } on FirebaseAuthException catch (e) {
        print('Error: $e');
      }
    }
  }
b5lpy0ml

b5lpy0ml1#

这个错误是由于userCredential可能为空,即Firebase无法使用给定的凭证创建用户。因此,最好等待FirebaseAuth

UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(email: _email, password: _password)

然后使用if语句检查user返回的值是否为null,然后继续上面的Firestore部分。
更简单的方法是在此处添加nullcheck:

...
.then((userCredential!) {
...
qyswt5oh

qyswt5oh2#

发生这种情况是因为您在userCredential上使用了!,而userCredential可能为空。您可以将代码更改为:

try {
  UserCredential? userCredential = await FirebaseAuth.instance
      .createUserWithEmailAndPassword(email: _email, password: _password);
  if (userCredential != null) {
    FirebaseFirestore.instance
        .collection('users')
        .doc(userCredential.user!.uid)
        .set({
      "uid": userCredential.user!.uid,
      'Name': _name,
      'userName': _userName,
      'email': _email,
    });
    Navigator.pushNamed(context, '/home');
    print('Registered user: ${userCredential.user}');
    const snackBar =
        SnackBar(content: Text('User has been successfully registered!'));
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }

  
} on FirebaseAuthException catch (e) {
  print('Error: $e');
}

相关问题