Flutter应用调用updateDisplayName设置用户显示名不生效如何解决
问题原因
你遇到的displayName为空的问题由以下2个核心原因导致:
updateDisplayName()本身是异步Future方法,你当前代码没有加await等待执行完成,方法还没跑完后续逻辑就已经执行完毕,Firebase Auth本地缓存的用户信息没有得到更新- 显示名更新完成后没有主动调用用户实例的
reload()方法刷新本地缓存,即使服务端更新完成,本地读取的还是旧的空值 - 代码混用
await和.then的异步写法,很容易产生时序逻辑漏洞
修复方案
将donorSignUp方法按如下逻辑调整,统一用await处理所有异步操作,等待更新和缓存刷新完成后再执行后续逻辑:
void donorSignUp() async { try { showLoading(); // 改用await同步写法,避免.then的异步时序问题 final result = await auth .createUserWithEmailAndPassword( email: email.text.trim(), password: password.text.trim() ); final currentUser = result.user!; // 等待显示名更新完成 await currentUser.updateDisplayName(donorModel.value.name); // 主动刷新本地用户缓存,确保后续读取的是最新值 await currentUser.reload(); // 所有异步操作完成后再执行后续业务逻辑 String _userId = currentUser.uid; _addDonorToFirestore(_userId); _clearSignUpControllers(); } catch (e) { debugPrint(e.toString()); Get.snackbar('Sign Up Failed', 'Try again'); } finally { // 补充关闭加载逻辑,避免异常场景下一直显示加载态 hideLoading(); } }
补充说明
如果后续其他页面读取displayName还是为空,主动执行一次用户刷新即可拿到最新值:
await auth.currentUser?.reload(); final latestDisplayName = auth.currentUser?.displayName;
内容的提问来源于stack exchange,提问作者Khanzaadeh
相关产品推荐
相关产品推荐

