У меня есть модель, содержащая список другой модели в качестве атрибута, который я собираю динамически из формы, заполняемой пользователем. код для первой модели:
class Attraction {
String atName;
String atDiscreption;
double latitude;
double longitude;
GeoPoint geoPoint;
String atImageUrl;
List<Timeline> timlines;
Attraction(
{
this.atName,
this.atDiscreption,
this.geoPoint,
this.latitude,
this.longitude,
this.atImageUrl,
this.timlines});
}
код для второй модели:
class Timeline {
int date;
String descreption;
Timeline(this.date, this.descreption);
}
Я просто пишу первую модель в firebase firestore, используя этот метод:
final CollectionReference attractions =
Firestore.instance.collection('attractions');
Future updateAttractionData(Attraction attraction) async {
return await attractions.document().setData({
'atName': attraction.atName,
'atDiscreption': attraction.atDiscreption,
'atImageUrl': attraction.atImageUrl,
'location': attraction.geoPoint,
});
}
и я хочу записать список временных шкал в Firebase в виде подколлекции. Возможно ли это? Я попробовал этот метод, но он не сработал:
Future updateTimelinesData(Attraction attraction) async {
return attraction.timlines.map((e) =>
attractions.document().collection('timelines').document().setData({
'date': e.date,
'discreption': e.descreption,
}));
}
PS: я могу передать данные непосредственно в виде поля карты в документы, как показано в этом коде:
final CollectionReference attractions =
Firestore.instance.collection('attractions');
Future updateAttractionData(Attraction attraction) async {
List<Map> convertTimlinesToMap({List<Timeline> timlines}) {
List<Map> timelines = [];
timlines.forEach((Timeline timeline) {
Map time = timeline.toMap();
timelines.add(time);
});
return timelines;
}
return await attractions.document().setData({
'atName': attraction.atName,
'atDiscreption': attraction.atDiscreption,
'atImageUrl': attraction.atImageUrl,
'location': attraction.geoPoint,
//we used a method here because Firebase does not writes list of objects , but it can do map attributes
//so we're converting the list of timeline objects to list of maps
'timeline': convertTimlinesToMap(timlines: attraction.timlines),
});
}
но я ищу, чтобы передать его как вложенную коллекцию, а не как поле.