【发布时间】:2021-10-25 23:24:31
【问题描述】:
我正在设置一个用户配置文件,我的 Firestore 中有一个包含第一个“用户”的集合,在这个集合中我有这个用户的 ID,最后我可以显示名称、uid 等。 问题是我想在前端打印该名称,但我无法访问此集合,因为我不知道如何在我的 .doc(uid) 中使用当前 uid,(uid 未定义),我使用了获取uid的未来方法,但我不知道如何连接这些。 希望你能帮助我!
这是我的前端代码
FutureBuilder(
future: FirebaseFirestore.instance
.collection('users')
.doc(uid)
.get(), //tryna to use that collection but uid is not defined correctly
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
var name = snapshot.data as DocumentSnapshot;
return Text(name['displayName'],
);
} else {
return Text("Loading...");
}
},
)
和我的提供者当前的用户 ID 代码
Future<String> inputData() async {
final User? user = _auth.currentUser;
final uid = user!.uid;
// here you write the codes to input the data into firestore
return uid;
}
我在这里更新了前端代码:
FutureBuilder(
future: FirebaseFirestore.instance
.collection('users')
.doc(FirebaseAuth.instance.currentUser!.uid)
.get(), //tryna to use that collection but uid is not defined correctly and I need a void but
// I have one in my auhtprovider
//solution ? create id from here : use my provider
builder: (context, snapshot) {
if (snapshot.hasData)
return Text("Loading...");
if (snapshot.data == null) {
print('Document does not exist on the database');
}else{
return Text("Researching data...");
}
if (snapshot.connectionState == ConnectionState.done) {
var name = snapshot.data as DocumentSnapshot;
return Text(name['displayName'],
);
} else {
return Text("Loading..");
}
},
)
和 UID ?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
Future userSetup(String displayName) async {
CollectionReference users = FirebaseFirestore.instance.collection('Users');
FirebaseAuth auth = FirebaseAuth.instance;
String uid = auth.currentUser!.uid.toString();
await users.doc(uid).set({'displayName': displayName, 'uid': uid });
final result = await users.doc(uid).get();
final data = result.data() as Map<String, dynamic>;
return data['displayName'];
}
加上我的 Firestore 文档的照片:
【问题讨论】:
-
.doc(FirebaseAuth.instance.currentUser.uid)? -
我必须添加“!”在
.doc(FirebaseAuth.instance.currentUser!.uid)中,但它返回错误:类型'Null' 不是类型转换中'DocumentSnapshot -
所以听起来当前用户没有文档,您的代码无法处理。您需要在访问
snapshot.data之前检查if (snapshot.hasData),然后在访问snapshot.data.data之前检查该文档是否存在if (snapshot.data.exists)。
标签: flutter google-cloud-firestore provider uid