当前位置: 首页 > 知识库问答 >
问题:

如何在我朋友集合中存储某人用户ID,以及如何使用firestore和Flutter检索用户数据?

赫连坚
2023-03-14

我想将我的朋友用户ID存储在我的朋友集合中。

我不知道如何在其他用户集合中存储某人详细信息。

下面是我获取CurrentUser的代码。

  Future<void> _getUserDoc() async {
    final FirebaseAuth _auth = FirebaseAuth.instance;
    final Firestore _firestore = Firestore.instance;

    FirebaseUser user = await _auth.currentUser();
    setState(() {
      userRef = _firestore.collection('users').document(user.uid);
    });
  }
USERS
-user1 (current user)
-name: John
-age: 20
--FRIENDS
----user2id
----user3id

-user2
-name: Richie
-age: 20
--FRIENDS
----user3id
   Padding(
                    padding:
                        const EdgeInsets.only(left: 20.0, right: 20.0, top: 10.0),
                    child: Text(
                      '20',
                      style: TextStyle(
                          fontFamily: 'Montserrat',
                          fontWeight: FontWeight.bold,
                          fontSize: 17.0),
                    ),
                  ),

共有1个答案

吴品
2023-03-14

我认为存储其他用户文档的最简单的方法是,如果将其他用户documentreference存储在当前用户中,您可以使用FutureBuilder构建它们

在红框中:friends是其他用户DocumentReference的数组

例如,您有用户模型

class UserModel {
  final int age;
  final String name;
  final List<DocumentReference> friends;

  UserModel(this.age, this.name, this.friends);

  // to get from Firestore
  UserModel.fromSnapshot(DocumentSnapshot snapshot):
    age = snapshot['age'],
    name = snapshot['name'],
    friends = List.from(snapshot['friends']);

}
FutureBuilder(
        future: currentUser.friends.first.get(), // this will take the first friend of current user
        // or you can query the list here with where 
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
              return Center(child: Text('Connection State none'));
            case ConnectionState.active:
            case ConnectionState.waiting:
              return Center(child: CircularProgressIndicator());
            case ConnectionState.done:
              if (snapshot.hasError)
                return Center(child: Text('Error: ${snapshot.error}'));
              return Padding(
                    padding:
                        const EdgeInsets.only(left: 20.0, right: 20.0, top: 10.0),
                    child: Text(
                      snapshot.data['age'],
                      style: TextStyle(
                          fontFamily: 'Montserrat',
                          fontWeight: FontWeight.bold,
                          fontSize: 17.0),
                    ),
                  );
          }
        });
 类似资料:
  • 问题内容: 我正在尝试使用discord.py编写一个简单的机器人,所以我从有趣的命令开始,例如只是为了获得api的优势。 问题答案: 因此,我经过几天的反复试验终于弄清楚了如何做到这一点,希望其他人可以从中受益,并且比我实际承受的痛苦更少。解决方案最终很容易。

  • 当用户登录时,我将用户id存储到会话中,然后我希望将该用户id传递给ajax以检索数据库中的其他信息。存储在会话中的用户ID未传递给allResult。php我的登录页面代码片段,我在其中进行会话: 现在,登录后,用户将被带到仪表板: 在仪表板中,我试图使用ajax访问用户的其他数据 我需要获取用户id才能运行allResult。php所有结果。php

  • 问题内容: 我有两个表:Users和User_Friend,用于显示与附加字段的关系。 具有hibernate注释的Java实体: 我正在尝试将反序列化为JSON时解决递归问题,我已经将@JsonManagedReference添加到User类的userFriends和userFriendOf的集合中,并将@JsonBackReference添加到UserFriend类的user和friendUs

  • 如何在MVC 5中获取当前登录用户的id?我尝试了StackOverflow建议,但它们似乎不适用于MVC 5 另外,MVC 5为用户分配资源的最佳实践是什么?(例如,

  • 问题背景 MySQL中有三个表,分别是“题库表”、“错题表”和“用户表”,现在需要实现不同用户存储不同的错题,不同用户存储的错题可能会重复,同一用户错题不会重复 请问MySQL中如何想在某一列中存储多值类数据,如多个用户id,应该如何设置表结构及类型?

  • 问题内容: 以下是允许用户将数据存储到Firestore中的代码。问题是,登录到该应用程序的所有用户都可以查看上传的数据。我如何才能仅允许当前登录的用户仅存储其帐户的数据? 对于Firebase数据库,我使用以下代码(有效,但不适用于Firestore) FirebaseUser用户= FirebaseAuth.getInstance()。getCurrentUser(); 字符串userId =