我正在使用Flutter和Firebase创建应用程序。我有一些奇怪的问题。我正在创建身份验证,并且工作正常,但是当我尝试向Firestore数据库中添加一些集合时,displayName的记录设置为null。
FuturecreateUser(email, password, displayName) async { final FirebaseUser user = await _auth.createUserWithEmailAndPassword( email: email, password: password); UserUpdateInfo info = new UserUpdateInfo(); info.displayName = displayName; _auth.updateProfile(info); Firestore.instance.collection('users').document().setData({ 'name': user.displayName, 'uid': user.uid, 'email': user.email, 'isEmailVerified': user.isEmailVerified, 'photoUrl': user.photoUrl, }); return user; }
这是创建用户的Future类。
void _handleSubmitted() { userAuth .createUser( emailController.text, passwordController.text, nameController.text) .then((onValue) { print("Sign Up button clicked: $onValue"); }); }
单击“注册”按钮时,此方法为处理方法。
和收藏看起来像这张照片。
如果我没记错的话,致电时本地用户配置文件不会立即更新updateProfile
。这意味着您应该只将本地值写入数据库(最简单),或者强制重新加载概要文件(最安全)。
如前所述,这是最简单的方法:
Firestore.instance.collection('users').document().setData({ 'name': displayName, 'uid': user.uid, 'email': user.email, 'isEmailVerified': user.isEmailVerified, // will also be false 'photoUrl': user.photoUrl, // will always be null });
请注意,该值isEmailVerified
始终为false,并且photoUrl
始终null
位于新创建的电子邮件+密码帐户中。
您可以通过调用FirebaseUser.reload()来强制重新加载用户数据:
_auth.updateProfile(info); await user.reload(); user = _auth.getCurrentUser();