【问题标题】:Get user data from Firebase从 Firebase 获取用户数据
【发布时间】:2020-11-05 08:18:18
【问题描述】:

我正在尝试从他们的 uid 获取用户数据并将其用于文本小部件。我应该创建 getCurrentUser 方法来获取数据吗?我曾尝试使用查询快照,但它什么也没做。这是代码:

            Expanded(
              child: Container(
                margin: EdgeInsets.only(top: 10.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text('Name'),
                    Text('Email@email.com'),
                    Text('+02112345678'),
                  ],
                ),
                  ),
                ),

这里是更新:

            Expanded(
              child: Container(
                margin: EdgeInsets.only(top: 10.0),
                child: FutureBuilder(
                  future: getData(),
                  builder: (context,
                      AsyncSnapshot<DocumentSnapshot> snapshot) {
                    if (snapshot.connectionState ==
                        ConnectionState.done) {
                      return Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: <Widget>[
                          Text(snapshot.data['Full Name']),
                          Text(snapshot.data['Email Address']),
                          Text(snapshot.data['Phone Number']),
                        ],
                      );
                    } else if (snapshot.connectionState ==
                        ConnectionState.none) {
                      return Text("No Data");
                    }
                    return CircularProgressIndicator();
                  },
                ),
              ),

输出是这样的:

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore firebase-authentication


    【解决方案1】:

    您需要使用FutureBuilder 小部件,首先创建一个获取用户的方法:

      Future<DocumentSnapshot> getData() async {
        FirebaseUser firebaseUser = await FirebaseAuth.instance.currentUser();
        return await Firestore.instance
            .collection("UserAccount").document(firebaseUser.uid).get();
      }
    

    然后在build方法里面:

              FutureBuilder(
                future: getData(),
                builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
                  if (snapshot.connectionState == ConnectionState.done) {
                      return Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Text(snapshot.data["name"]),
                        Text(snapshot.data["email"]),
                        Text(snapshot.data["number"]),
                      ],
                    ),
                  } else if (snapshot.connectionState == ConnectionState.none) {
                    return Text("No data");
                  }
                  return CircularProgressIndicator();
                },
              ),
    

    在上面的代码中,我们使用了FutureBuilder,因为get()是异步的,那么在ConnectionState.done内部你将使用snapshot.data获取数据。


    如果你阅读文档会更好,检查所有的颤振食谱:

    https://flutter.dev/docs/cookbook

    【讨论】:

    • 你是否复制了getData()方法,这里还需要在firestore中添加字段名称snapshot.data["name"],例如如果你在firestore中有name字段,那么你使用snapshot.data["name"]
    • 是的,我也复制了这个方法。我已经匹配了Firestone中的字段,单引号还是双引号都没关系?
    • 还是出现同样的错误,我会发布调试控制台
    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2019-09-18
    • 2021-02-09
    • 2023-03-19
    相关资源
    最近更新 更多