#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
, я думаю, это похоже на ваши шоколадные конфеты.