Многопользовательское приложение, использующее flutter

#dart #flutter

#dart #flutter

Вопрос:

Я работаю над одним приложением, у которого несколько пользователей. У меня есть список ресурсов, этот список ресурсов похож на список конфет (только один и уникальный). Теперь я показываю этот chocolates на главном экране всем активным пользователям. Теперь пользователь может нажать на шоколад, и он будет предоставлен ему. Но, когда это произойдет, я хочу обновить всех зарегистрированных пользователей, чтобы убедиться, что у двух пользователей нет одинакового шоколада.

Я использую триггер базы данных для отслеживания изменений в базе данных. Я могу это сделать, но меня беспокоит, как обновить ListView.

Мой алгоритм такой, как показано ниже:

1) Отслеживать изменения в базе данных. 2) Получите свежий набор данных. 3) Представление обновления

Я попытался создать syncDatabaseFunction, как показано ниже:

   Future syncDatabaseFunction() async {
    CollectionReference reference = Firestore.instance.collection('Chocolates');
    reference.snapshots().listen((querySnapshot){
      querySnapshot.documentChanges.forEach((change){
        print("Changed Chocolate");
        BackendOperations.getAllChocolates().then((value){

         var chocolateTemp = (value as List<ChocolateModel>)
              .where((element) => (element.chocolateColor == "Brown"))
              .toList();
          print("Count is ");
         return chocolateTemp;

        });
      });
    });
  }
  

Для просмотра списка я использую FutureBuilder.

Ответ №1:

Я думаю, что если вы используете StreamBuilder , вы решите проблему. Когда пользователь удаляет или добавляет новый комментарий, он отображается для всех пользователей. StreamBuilder для этого было создано быть наблюдателем потока.

Это мой код:

 Widget getListComment() {
    return StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance
          .collection('comments')
          .where('post', isEqualTo: postRef)
          .orderBy('createdAt', descending: true)
          .snapshots(),

      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
        switch (snapshot.connectionState) {
          case ConnectionState.waiting:
            return Column(
              children: <Widget>[
                CircularProgressIndicator(),
              ],
            );

          default:
            return new ListView(
              children:
                  snapshot.data.documents.map((DocumentSnapshot document) {
                return CommentItem(
                  key: Key(document.documentID),
                  comment: Comment.fromDoc(document),
                  myUser: widget.myUser,
                );
              }).toList(),
            );
        }
      },
    );
  }
  

Я получаю комментарии от Firebase и показываю в ListView , я думаю, это похоже на ваши шоколадные конфеты.