当文档ID等于Flutter中当前记录的用户ID时获取Firestore数据?

问题描述 投票:1回答:1

我想在用户登录后显示用户个人资料部分,然后进入个人资料视图部分。在身份验证部分,我将用户数据存储在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),
                      ),
                    ),
                  ),
.....

flutter dart google-cloud-firestore firebase-authentication userid
1个回答
3
投票

如果您可以控制Users中文档的创建,则可以为其赋予与FirebaseUser的uid相同的ID。

您可以选择使用StreamBuilderFutureBuilder进行检索。

如果要使用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();
}
© www.soinside.com 2019 - 2024. All rights reserved.