我已经做了一个登录页面,并在Flutter和Dart中使用Firebase认证注册页面。
注册后,我尝试检索当前用户的displayName,然而,当我尝试检索它时,我似乎得到的不是当前用户的displayName,而是我在此之前注册的displayName。
然而,当我热重启应用程序时,我可以很好地获得当前用户的详细信息。
我尝试使用以下代码检索当前用户的displayName属性:
static String? getUsername() {
return FirebaseAuth.instance.currentUser?.displayName!;
}
我调用它的方法是,初始化一个变量来存储我从方法中得到的用户名,存储在一个不同的dart文件中,不同于我得到的注册页面,我还在initState()方法中调用了这个方法。
下面是我注册用户和设置displayName的方法:
static void signUpUser(String username, String emailAddress, String password) async {
try {
final credential =
await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: emailAddress,
password: password,
);
// Here I set the displayName property
await credential.user!.updateDisplayName(username);
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {}
else if (e.code == 'email-already-in-use') {}
} catch (e) {}
}
我尝试使用user.reload()和FirebaseAuth.userChanges()函数,但这些似乎并没有解决我的问题。
也许我尝试检索displayName属性时出错了,我错过了什么?我对开发自己的应用程序和使用Firebase还很陌生。
1条答案
按热度按时间htzpubme1#
updateDisplayName
返回的Future
在调用底层的Firebase SDK时完成。它不会自动更新应用程序中的用户配置文件。这只会每小时自动更新一次(当SDK刷新配置文件所基于的ID令牌时),或者当用户注销并再次登录时。要在这些自动条件之外从应用程序代码强制刷新配置文件,可以对用户对象执行call
reload()
。