我要在用户登录后显示用户个人资料部分,然后进入个人资料视图部分。在身份验证部分,我将用户数据存储在Cloud Firestore数据库中。在那儿,我将文档ID设置为等于用户ID。现在,我想根据用户ID检索文档字段数据。
这就是我所做的
class MyProfile extends StatefulWidget {
Future<String> getData() async {
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final String uid = user.uid.toString();
return uid;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My Profile'),
backgroundColor: Color(0xFF4A184C),
),
body:
StreamBuilder(
stream:
Firestore.instance.collection('Users').document().snapshots(),
builder: (context, snapshot){
if(!snapshot.hasData) return Text('Loading Data.. Please Wait...');
return
Column(
children: <Widget>[
Card(
child: ListTile(
leading: Icon(
Icons.account_circle,
size: 40,
color: Colors.amber,
),
title: Text(
"Name : " + snapshot.data['username'],
style: TextStyle(
fontSize: 18,
color: Color(0xFF4A184C),
fontWeight: FontWeight.bold),
),
),
),
.....
答案 0 :(得分:3)
如果您可以控制Users
中文档的创建,则可以为其提供与FirebaseUser
的uid相同的ID。
您可以选择使用StreamBuilder
或FutureBuilder
进行检索。
如果要使用StreamBuilder
对此数据进行连续更新,可以使用异步生成器功能。
Stream<DocumentSnapshot> getUserStream() async* {
final uid = await getData();
yield* Firestore.instance.document("Users/$uid").snapshots();
}
或者,如果您只想一次获取数据,则可以使用FutureBuilder
。未来可以从以下功能中得出
Future<DocumentSnapshot> getUser() async {
final uid = await getData();
return Firestore.instance.document("Users/$uid").get();
}