Как добавить / извлечь данные из FireStore, используя StreamBuilder <QuerySnapshot>во флаттере? - PullRequest
0 голосов
/ 24 февраля 2019

Я хочу добавить данные в мой firestore как

-> пользователи (коллекция) -> идентификатор пользователя (документ) -> друзья (коллекция)

Я хочу добавить /получить данные из коллекции друзей

Вот мой код:

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

    FirebaseUser user = await _auth.currentUser();
    DocumentReference ref = _firestore.collection('users').document(user.uid);
 }


Widget _buildBody(BuildContext context) {
  return StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance
        .collection('users')
        .document()
        .collection('friends')
        .snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData)
        return Center(
            child: CircularProgressIndicator(
          backgroundColor: Colors.deepPurple,
        ));

      return _buildList(context, snapshot.data.documents);
    },
  );
}

В виджете _buildbody, как я использую user.uid для получения данных из коллекции друзей.

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

1 Ответ

0 голосов
/ 24 февраля 2019

Если ваш виджет является виджетом с отслеживанием состояния, то вы можете иметь ссылку на документацию пользователя в состоянии виджета и использовать ту же ссылку для извлечения данных коллекции друзей, как:

 DocumentReference userRef;
 @override
 initState(){ 
  super.initState();
  _getUserDoc();
 } 

 //Call this method from initState()
 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);
    });
 }


Widget _buildBody(BuildContext context) {
  if(userRef == null) {
  CircularProgressIndicator(
          backgroundColor: Colors.deepPurple,
        ));
  }

  return StreamBuilder<QuerySnapshot>(
        stream: userRef
        .collection('friends')
        .snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData)
        return Center(
            child: CircularProgressIndicator(
          backgroundColor: Colors.deepPurple,
        ));

      return _buildList(context, snapshot.data.documents);
    },
  );
}

PS: Просто убедитесь, что userRefне равен NULL перед вызовом функции StreamBuilder "_buildBody"

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