如何在flutter中从firestore获取当前用户数据?

Jac*_*rva 5 flutter google-cloud-firestore

我是 flutter 和 firestore 的新手。我\xc2\xb4m 构建一个社交媒体应用程序,需要从当前登录的用户获取一些用户信息到用户个人资料页面。例如用户名、电子邮件等。 \n我已设法将用户数据上传到 firestore,但我正在努力将当前的用户信息返回到我的项目中。

\n\n

我已经尝试过这种方法,它确实从 firestore 获取了用户信息,但不幸的是不是当前的用户信息。\n我想问题是我卡在了 firestore 数据库中的第一个文档上?

\n\n
StreamBuilder(\n  stream:\n      Firestore.instance.collection('userData').snapshots(),\n  builder: (context, snapshot) {\n    if (!snapshot.hasData) {\n      return CircularProgressIndicator();\n    }\n\n    return Container(\n      child: Padding(\n        padding: const EdgeInsets.only(top: 75.0),\n        child: Column(\n          crossAxisAlignment: CrossAxisAlignment.start,\n          children: <Widget>[\n            Text(\n              snapshot.data.documents[0]['userName'],\n              style: TextStyle(fontSize: 25.0),\n            ),\n            Padding(\n              padding: const EdgeInsets.only(top: 5.0),\n              child:\n                  Text(snapshot.data.documents[0]['email']),\n            ),\n          ],\n        ),\n      ),\n    );\n}),\n
Run Code Online (Sandbox Code Playgroud)\n\n

我真的很感激任何潜在的解决方案。

\n\n

谢谢你!

\n

小智 5

      Future<void> _getUserName() async {
        Firestore.instance
            .collection('Users')
            .document((await FirebaseAuth.instance.currentUser()).uid)
            .get()
            .then((value) {
          setState(() {
            _userName = value.data['UserName'].toString();
          });
        });
      }
Run Code Online (Sandbox Code Playgroud)

像这样将 _userName 添加到 initstate

 void initState() {
    super.initState();
    _getUserName();
  }
Run Code Online (Sandbox Code Playgroud)

并这样称呼它

  child: Text('Hello $_userName,'),

Run Code Online (Sandbox Code Playgroud)

我希望这会起作用


Umu*_*ven 2

如果您使用 Firebase 身份验证,那么

import 'package:firebase_auth/firebase_auth.dart';

FirebaseUser user = await FirebaseAuth.instance.currentUser();
Run Code Online (Sandbox Code Playgroud)

将为您获取当前登录的用户。之后,你可以做

var email = user.email;
var userName = user.displayName;
Run Code Online (Sandbox Code Playgroud)

获取相关的用户信息。