You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Firebase注册时保存displayName失败,SnackBar返回null求助

解决Firebase Auth注册时displayName为null的问题

嘿,我一眼就看到问题出在哪了——你已经准备好要更新用户的displayName,但漏掉了最关键的一步:把更新提交到Firebase服务器!

你创建了UserUpdateInfo对象并设置了displayName,但没有调用user.updateProfile(userUpdateInfo)方法。这就好比你填好了表单,但没点提交按钮,服务器根本不知道你要更新这个信息。直接调用user.reload()只是从服务器重新拉取数据,但服务器上的displayName还是空的,所以自然返回null。

这里是修正后的完整代码,我标注了关键改动点:

Future<void> signUp() async {
  try {
    FirebaseUser user = (await FirebaseAuth.instance
            .createUserWithEmailAndPassword(
                email: email.text, password: password.text))
        .user;
    
    // 准备用户更新信息
    UserUpdateInfo userUpdateInfo = UserUpdateInfo();
    userUpdateInfo.displayName = name.text;
    
    // 🔑 关键步骤:提交更新到Firebase Auth服务器
    await user.updateProfile(userUpdateInfo);
    
    // 重新加载用户数据,确保拿到最新状态
    await user.reload();
    // 注意:reload后需要重新获取用户实例,原对象不会自动更新
    user = await FirebaseAuth.instance.currentUser();
    
    showInSnackBar("User name ${user.displayName}");
    
    try {
      await user.sendEmailVerification();
      showInSnackBar("Email verification sent");
    } catch (e) {
      print(e);
    }
  } catch (e) {
    String errorCode = e.code;
    print(e);
    if (errorCode == "ERROR_EMAIL_ALREADY_IN_USE") {
      showInSnackBar("This email is already in use");
    } else {
      showInSnackBar("Something went wrong! Try again later");
    }
  }
}

另外还有两个小细节提醒你:

  • 调用reload()之后,一定要重新获取currentUser(),因为原来的user对象实例不会自动同步服务器的最新数据。
  • 你代码里有个拼写错误Somthing,我已经改成正确的Something了。

这样修改后,你的SnackBar应该就能正确显示用户的displayName了!

内容的提问来源于stack exchange,提问作者Pranav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:27:57