Как сохранить идентификатор пользователя в моей коллекции друзей и Как получить данные этого пользователя, используя firestore с флаттером? - PullRequest
0 голосов
/ 20 марта 2019

Я хочу сохранить идентификатор своего друга в моей коллекции друзей.

Я не знаю, как хранить чьи-либо данные в другой коллекции пользователей.

Вот мой код для получения 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 и показать в виджете.

Вот мой код виджета, где я хочу показать имя пользователя 2.

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

Iхотите показать вместо 20 в текстовом виджете, user2 возраст из магазина.

Заранее спасибо.

1 Ответ

1 голос
/ 21 марта 2019

Я думаю, что самый простой способ сохранить документную ссылку другого пользователя, если вы храните других пользователей DocumentReference в своем текущем пользователе, вы можете создать их с помощью FutureBuilder

enter image description here

внутри красной рамки: друзья - Массив другого пользователя DocumentReference s

Например, у вас есть модель пользователя

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']);

}

и я предполагаю, что вы получаете текущего пользователя из магазина

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

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...