gpt4 book ai didi

firebase - 用户每次在Flutter中登录Firebase时数据都会更新吗?

转载 作者:行者123 更新时间:2023-12-03 03:23:54 26 4
gpt4 key购买 nike

我正在尝试登录用户并检查用户是否为新用户,以及他/她是否为新用户给该特定用户1000个硬币,但是每次用户注销并登录,即使他们不是新用户(他们我的数据库中已经存在)用户的硬币变成1000,我做错了吗?

int coins = 1000;

Future<GoogleSignInAccount> _handleGoogleSignIn() async {
try {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
FirebaseUser firebaseUser =
(await _auth.signInWithCredential(credential)).user;
if (firebaseUser != null) {
final QuerySnapshot result = await Firestore.instance
.collection('u')
.where('id', isEqualTo: firebaseUser.uid)
.getDocuments();
final List<DocumentSnapshot> documents = result.documents;
if (documents.length == 0) {
// Update data to server if new user
Firestore.instance
.collection('u')
.document(firebaseUser.uid)
.setData({
'coins': coins,
});
}
}
return googleUser;
} catch (error) {
return error;
}
}

最佳答案

您的查询和存储数据的方式不匹配。

您将数据存储为:

  Firestore.instance
.collection('u')
.document(firebaseUser.uid)
.setData({
'coins': coins,
});

因此,每个用户都存储在一个文档中,该文档以其UID作为键,并且具有一个名为 coins的字段。

然后,当您尝试加载此文档时,您可以执行以下操作:
final QuerySnapshot result = await Firestore.instance
.collection('u')
.where('id', isEqualTo: firebaseUser.uid)
.getDocuments();

该查询查找具有 字段id 以及用户UID值的文档。并且由于您的文档仅包含 coins字段,因此没有与该查询匹配的文档。

解决方案是使用用户文档的直接查找,而不是查询:
final DocumentSnapshot result = await Firestore.instance
.collection('u')
.document(firebaseUser.uid)
.get();
if (!documents.exists) {
...

关于firebase - 用户每次在Flutter中登录Firebase时数据都会更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59909605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com