Привет, я новичок в трепетании, и у меня проблемы с получением данных в мою модель из пожарного хранилища, я объясню: я пытаюсь сначала получить основную коллекцию моей базы данных под названием соседи, а затем после того, как я получил все документы из каждому соседу я пытаюсь получить идентификаторы документов каждого из них, а затем получить их платежи, которые являются вспомогательной коллекцией для каждого соседа, после этого я пытаюсь передать данные в модель и создать объекты списка этой модели для каждого соседа.
Проблема в том, что я пытаюсь вернуть свой список моделей, но могу добавить в него только соседей, платежи - пустой список, я подписываюсь на платежи, я прикреплю код:
Future<List<NeighborDataModel>> getNeighborData() async {
neighborhoodData = [];
neighbors = await _firestore
.collection('neighbors')
.getDocuments()
.then((val) => val.documents);
for (int i = 0; i < neighbors.length; i++) {
_firestore
.collection('neighbors')
.document(neighbors[i].documentID.toString())
.collection('payments')
.snapshots()
.listen(createListOfPayments);
neighborhoodData.add(NeighborDataModel.fromFirestore(neighbors[i], payments));
}
print(neighborhoodData.length);
return neighborhoodData;
}
Future createListOfPayments(QuerySnapshot snapshot) async {
payments = [];
var doc = snapshot.documents;
for (var Doc in doc) {
payments.add(Doc);
}
return payments;
}
Вопрос: есть ли возможность вернуть список платежей из функции моментального снимка createListOfPayments, или есть другой лучший способ заполнить мой список моделей?.
Вот моя модель:
import 'package:cloud_firestore/cloud_firestore.dart';
class NeighborDataModel {
String name;
String lastName;
String streetName;
String streetNumber;
String phone;
String email;
String entryCode;
List payments;
NeighborDataModel({
this.name,
this.lastName,
this.streetName,
this.streetNumber,
this.phone,
this.email,
this.entryCode,
this.payments,
});
factory NeighborDataModel.fromFirestore(
DocumentSnapshot neighbor, List<DocumentSnapshot> payments) {
Map neighborData = neighbor.data;
List paymentData = [];
for(var payment in payments){
paymentData.add(payment.data); }
return NeighborDataModel(
name: neighborData['name'],
lastName: neighborData['last_name'],
streetName: neighborData['street'],
streetNumber: neighborData['house_number'],
phone: neighborData['phone'],
email: neighborData['email'],
entryCode: neighborData['entry_code'],
payments: paymentData
);
}
}
Взял пример из: https://medium.com/@borsezf2 / sub-collections-list-from-firestore-d6c6e029bed3 * 1 013 *
Заранее большое спасибо!