Флаттер Firestore StreamBuilder в списке литературы - PullRequest
0 голосов
/ 20 января 2019

База данных Firestore - это сборка из одной коллекции пользователей.Каждый пользовательский документ имеет некоторые общедоступные данные и массив идентификаторов пользователей, за которыми он следует, называемые следующим.В приложении Flutter я хотел бы создать StreamBuilder для следующего массива.Поэтому, когда пользователь добавляет кого-то в свой следующий массив - он будет добавлен в поток, а когда пользователь из следующего списка меняет свои данные - поток тоже обновляется.

Я подумал, может быть, использовать списокссылок ('users/usersid3') вместо списка идентификаторов ('userid3'), но я не знаю, как это реализовать.

Так структурирована база данных.

users
      - user1id
            - some public data
            - following: [user2id, user3id]
      - user2id
            - some public data
            - following: []
      - user3id
            - some public data
            - following: [user2id]

1 Ответ

0 голосов
/ 22 января 2019

Итак, для решения этой проблемы есть обходной путь.

  1. Я сохранил следующий список в виде карты (с именем 'followMap') в отдельном документе 'followDoc').
  2. Использовал StreamBuilder для этого документа:
StreamBuilder(
  stream: Firestore.instance.collection('users').document(uid).collection('data').document('followingDoc').snapshots(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) return Text("No data");
    return ListView.builder(
      itemCount: snapshot.data['followingMap'].keys.toList().length,
      itemBuilder: (BuildContext context, int index) {
        return followingItemWidget(id: snapshot.data['followingMap'].keys.toList()[index]);
      }
    );
  },
)
И, наконец, я создал виджет с именем 'followItemWidget', который имеет StreamBuilder для документа пользователя, за которым я следую.

Это прекрасно работает, хотя я считаю, что должен быть способсделать это только с одним StreamBuilder.

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