gpt4 book ai didi

firebase - 如何将 Future 变量分配给 Flutter 中的类 getter

转载 作者:行者123 更新时间:2023-12-03 03:34:59 25 4
gpt4 key购买 nike

我正在尝试通过 Streamer 从 Firebase 读取用户数据并将它们分配到我的 User 类的属性中。我有一个 FirabaseActions 类做 firebase 的东西。这是我使用流媒体获取数据的方法。它工作得很好,并且 print(user.data['userName']);给我正确的结果。

static Future<User> userDataStream(loggedInUserEmail) async {
final databaseReference = Firestore.instance;
User currentUser;

await for (var snapshot in databaseReference
.collection('users')
.where('email', isEqualTo: loggedInUserEmail)
.snapshots()) {
for (var user in snapshot.documents) {
print(user.data['userName']);
currentUser.userName = user.data['userName'];
currentUser.email = user.data['email'];
currentUser.userID = user.data['userID'];
currentUser.level = user.data['level'];
}
}
return currentUser;
}

当我尝试将这些用户信息分配给我的类属性时,问题就开始了。这是我的用户类。我收到如下错误。它是关于 future 类型的,但我无法处理。我该怎么办?

'Future' 类没有实例 getter 'email'。
接收者:“ future ”的实例
尝试调用:电子邮件
class User {
String userName;
String userID;
String email;
int level;

User({this.userName, this.userID, this.level, this.email});
}

最佳答案

第一个问题是您不能分配这样的用户名
currentUser.userName = user.data['userName']; 因为 currentUser 为空。一个简单的解决方案是替换
User currentUser;User currentUser = User();
第二个问题:

我认为您永远不应该通过他的电子邮件来搜索用户,而不是通过您从中获得的 UID
FirebaseUser user = await FirebaseAuth.instance.currentUser() ,

所以你会像这样查询用户:

  static Future<User> userDataStream() async {
final firestore = Firestore.instance;
final currentFirestoreUser = await FirebaseAuth.instance.currentUser();
User currentUser;

var query = await firestore
.collection('users')
.where('uid', isEqualTo: currentFirestoreUser.uid)
.getDocuments();
var user = query.documents.first.data;
currentUser = User(
userName: user['userName'],
userID: user['userID'],
level: user['level'],
email: user['email']);

return currentUser;
}

您可以将 UID 添加为方法的参数,或将其保留在方法中。

关于firebase - 如何将 Future 变量分配给 Flutter 中的类 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61667549/

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