Flutter 如何从Flatter中的firestore获取当前用户数据?

Flutter 如何从Flatter中的firestore获取当前用户数据?,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我是新来的扑动和消防商店。我正在构建一个社交媒体应用程序,需要从当前登录的用户获取一些用户信息到用户档案页面。包括用户名、电子邮件等。 我已经设法将用户数据上传到firestore,但是我很难将当前的用户信息返回到我的项目中 我尝试过这种方法,它确实从firestore中获得了用户信息,但不幸的是,它没有获得当前的用户信息。 我想问题是我被firestore数据库中的第一个文档卡住了 StreamBuilder( stream: Firestore.instance.collec

我是新来的扑动和消防商店。我正在构建一个社交媒体应用程序,需要从当前登录的用户获取一些用户信息到用户档案页面。包括用户名、电子邮件等。 我已经设法将用户数据上传到firestore,但是我很难将当前的用户信息返回到我的项目中

我尝试过这种方法,它确实从firestore中获得了用户信息,但不幸的是,它没有获得当前的用户信息。 我想问题是我被firestore数据库中的第一个文档卡住了

StreamBuilder(
  stream:
      Firestore.instance.collection('userData').snapshots(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return CircularProgressIndicator();
    }

    return Container(
      child: Padding(
        padding: const EdgeInsets.only(top: 75.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
              snapshot.data.documents[0]['userName'],
              style: TextStyle(fontSize: 25.0),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 5.0),
              child:
                  Text(snapshot.data.documents[0]['email']),
            ),
          ],
        ),
      ),
    );
}),
StreamBuilder(
流:
Firestore.instance.collection('userData').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回循环ProgressIndicator();
}
返回容器(
孩子:填充(
填充:仅限常量边集(顶部:75.0),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
snapshot.data.documents[0]['userName'],
样式:TextStyle(fontSize:25.0),
),
填充物(
填充:仅限常量边集(顶部:5.0),
儿童:
文本(snapshot.data.documents[0]['email']),
),
],
),
),
);
}),
我非常感谢任何可能的解决方案


谢谢大家!

如果使用Firebase身份验证,则

import'package:firebase_auth/firebase_auth.dart';
FirebaseUser=等待FirebaseAuth.instance.currentUser();
将为您获取当前登录的用户。在那之后,你可以

var email=user.email;
var userName=user.displayName;
获取相关的用户信息

      Future<void> _getUserName() async {
        Firestore.instance
            .collection('Users')
            .document((await FirebaseAuth.instance.currentUser()).uid)
            .get()
            .then((value) {
          setState(() {
            _userName = value.data['UserName'].toString();
          });
        });
      }
这样称呼它

 void initState() {
    super.initState();
    _getUserName();
  }
  child: Text('Hello $_userName,'),


我希望这能起作用

答案的可能重复取决于您在Firebase中存储用户数据的方式。如果使用用户的UID作为其在数据库中文档的ID,则可以使用
Firestore.instance.collection('userData').document(FirebaseAuth.currentUser.UID)
获取当前用户的文档。我可能错过了一个
等待
,但我希望你能明白。谢谢你,弗兰克!这让我更接近了!但我仍然面临一些问题。您能解释一下我应该如何使用用户的UID作为数据库中他们文档的ID吗?如前所述,我对整个firebase概念都很陌生。。。所以请跟我说实话。现在,我的代码将userdata存储在Firebase中,如下所示:_firestore.collection('userdata').add({'userName':userName,'cityName':cityName,'instrument':instrument,'email':email});我希望这能让sanse满意,再次感谢您的回复!非常感谢。这对我来说更有意义,但我仍然面临som问题。1#我在func“FirebaseUser user=await FirebaseAuth.instance.currentUser();”中的“await”上出现错误2#我没有在用户名上使用FirebaseAuth。这只是要求注册页面中的用户导航到下一页。因此,我在firestore上的文档中有用户名和一些超出要求的用户信息,如cityName。你对这件事有什么建议吗?再次感谢您的回复!