我正在尝试获取当前登录用户的用户 ID。这就是我尝试获取字符串形式的 UserID 的方式,其中函数打印 $userId 和 $uid。
String userId;
Future<String> getUser() async {
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final String uid = user.uid.toString();
print("uid in getuser function $uid");
userId = uid;
return uid;
}
这是我试图将 UserID(uid) 放入其中的 Stream(Futures 和 Stream 都在同一个类中)(Stream 中的 return 语句可以忽略)
// get hotel stream
Stream<List<Hotel>> get userHotels {
print("This is the uid ${getUser().toString()} in Stream");
return ownerCollection.document(uid).collection("hotels").snapshots()
.map(_hotelListFromSnapshot);
}
打印 $getUser().toString() 在控制台中给出:“这是 Stream 中‘Future’的 uid 实例”,而不是打印实际的 UserID。
打印 $userId 在控制台中给出:“这是 Stream 中的 uid null”
请帮忙,我想获取当前登录 Stream 的用户的 UserId
最佳答案
如上定义getUser()
返回 Future<String>
。所以toString()
将返回 Instance of 'Future'
.
您可能想做的是等待getUser()
首先完成。
您可以通过使用异步生成器来做到这一点, async*
和yield*
.
// get hotel stream
Stream<List<Hotel>> get userHotels async* {
final uid = await getUser();
print("This is the uid $uid in Stream");
yield* ownerCollection.document(uid).collection("hotels").snapshots()
.map(_hotelListFromSnapshot);
}
使用async*
意味着您将返回 Stream
。然后等待getUser()
最后,您可以使用 yield
在该流上放置值。 yield*
具体意味着您正在输入另一个 Stream
的值在您要返回的那一位上。
关于firebase - 为什么 Future<String> 返回 "Instance of Future<String>"而不是我的 Stream 中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61538678/