У меня есть две функции,
Первый, чтобы получить пользователей из Firestore. Затем я использую "Future.ForEach", чтобы зациклить этих пользователей.
Future<List> getData() async {
targetData.clear();
await Firestore.instance
.collection('users')
.document(currentUserId)
.collection('chats')
.getDocuments()
.then((userChats) async {
// Only two documents are coming from the db
return await Future.forEach(userChats.documents, getTargetData)
.then((onValue) {
print('forEech is done');
});
});
print('getData Returen');
// I use "targetData" to build viewList
return targetData;
}
Вызов этой функции из Future.forEach
Future<List> getTargetData(DocumentSnapshot targetDoc) async {
print('looping');
await Firestore.instance
.collection('users')
.document(targetDoc.documentID)
.get()
.then((targetRef) {
targetData.add(new TargetUserData(
targetRef.documentID,
targetRef.data['nickname'],
targetRef.data['photoUrl'],
targetDoc.data['timestamp'],
targetRef.data['token'],
targetDoc.data['unseen']));
});
return targetData;
}
Я звоню getData из FutureBuilder
return new FutureBuilder(
future: getData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return buildLoading();
default:
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
else
return createListView(context, snapshot);
}
},
);
Когда я запускаю приложение, оно работает отлично и, как и ожидалось, - вот журнал из оператора печати:
- I / флаттер (18780): цикл
- I / флаттер (18780): циклический I / флаттер
- (18780): forEech сделано
- I / флаттер (18780): getDataReturen
Горячий перезапуск - первый запуск
Я ожидаю при горячей перезагрузке, что получаю тот же результат, но что будет !!
- I / флаттер (18780): цикл
- I / флаттер (18780): цикл
- I / флаттер (18780): цикл
- I / флаттер (18780): forEech сделано
- I / флаттер (18780): getDataReturen
- I / флаттер (18780): forEech сделано
- I / флаттер (18780): getDataReturen
Горячие перезагрузки ...
Вопрос: Почему forEach зацикливается больше, чем ожидалось?