【问题标题】:How to get current userdata from firestore in flutter?如何在flutter中从firestore获取当前用户数据?
【发布时间】:2019-10-22 23:02:28
【问题描述】:

我是 Flutter 和 Firestore 的新手。我正在构建一个社交媒体应用程序,需要从当前登录的用户获取一些用户信息到用户个人资料页面。如用户名、电子邮件等。 我已经设法将用户数据上传到 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']),
            ),
          ],
        ),
      ),
    );
}),

我非常感谢任何潜在的解决方案。

谢谢!

【问题讨论】:

  • 答案取决于您在 Firebase 中存储用户数据的方式。如果你使用用户的UID作为他们在数据库中的文档的ID,那么你可以通过Firestore.instance.collection('userData').document(FirebaseAuth.currentUser.uid)获取当前用户的文档。我可能在某处遗漏了await,但我希望你能明白。
  • 谢谢弗兰克!这让我更近了一步!但我仍然面临一些问题。请您解释一下我应该如何使用用户的 UID 作为他们在数据库中的文档的 ID?如前所述,我对整个 firebase 概念很陌生……所以请与我裸露。我现在的代码,将用户数据存储在 Firebase 中,如下所示: _firestore.collection('userData').add({ 'userName': userName, 'cityName': cityName, 'instrument': instrument, 'email': email }) ;我希望这能让人明白,再次感谢您的回复!

标签: flutter google-cloud-firestore


【解决方案1】:

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

import 'package:firebase_auth/firebase_auth.dart';

FirebaseUser user = await FirebaseAuth.instance.currentUser();

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

var email = user.email;
var userName = user.displayName;

获取相关用户信息。

【讨论】:

  • 谢谢!这对我来说更有意义,但我仍然面临一些问题。 1# 我在函数“FirebaseUser user = await FirebaseAuth.instance.currentUser();”中的“await”出现错误2# 我没有在用户名上使用 FirebaseAuth。它只是要求注册页面中的用户导航到下一页。因此,我在 firestore 上的文档中有用户名和一些其他需要的用户信息,例如 cityName。您对这件事有什么建议吗?再次感谢您的回复!
【解决方案2】:
      Future<void> _getUserName() async {
        Firestore.instance
            .collection('Users')
            .document((await FirebaseAuth.instance.currentUser()).uid)
            .get()
            .then((value) {
          setState(() {
            _userName = value.data['UserName'].toString();
          });
        });
      }

像这样将 _userName 添加到 initstate

 void initState() {
    super.initState();
    _getUserName();
  }

这样称呼它

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

我希望这会奏效

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2021-06-16
    • 1970-01-01
    • 2019-06-12
    • 2021-07-31
    • 1970-01-01
    • 2021-03-05
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多