如何将某人的用户ID存储在我的朋友集合中,以及如何使用带闪动的Firestore检索该用户的数据?

时间:2019-03-20 00:06:18

标签: dart flutter google-cloud-firestore

我想将我的朋友userid存储在我的朋友集合中。

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

这是我获取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

这个问题分为两个部分- 1)如何将user2id和user3id存储在user1 FRIENDS集合中。 2)如何检索user2数据字段并在小部件中显示。

这是我的Widget代码,我想在其中显示user2的名称

   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),
                    ),
                  ),

我想在Text小部件中显示,而不是 20 ,而user2已从Firestore中获取年龄。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

enter image description here

红色框内:朋友是其他用户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']);

}

我认为您是从Firestore获取当前用户的

UserModel currentUser;

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),
                    ),
                  );
          }
        });

我希望这能解决您的问题。