Ответ 3.0
Ваш ответ заключается в следующем
- Извлеките элемент
createdAt
из массива DataSnapshot
, который равен allDocs
- Есть уловка, заключающаяся в том, что
createdAt
вводит метку времени в формате экземпляра Firebase TimeStamp, то есть => TimeStamp(seconds=int, nanoseconds=int)
, например: Timestamp(seconds=1593504718, nanoseconds=706167000)
- То, что нас волнует, получает
seconds
, который представляет собой не что иное, как временную метку - Используйте секунды и получите от него
Year
и сохраните его в своем yearDocs
Чтобы получить данные в форме года, мы делаем это
allDocs.forEach((item) => print(item.data["createdAt"].seconds));
// gives your timestamp
// 1593504718
// 1593504699
// 1593259892
// 1596121191
Мы можем получить год, выполнив это
new DateTime.fromMillisecondsSinceEpoch(1593504718 * 1000).year
Объединяя все это, давайте код:
List documents = [];
@override
void initState() {
Firestore.instance.collection('Collection').getDocuments().then((snapshot) {
List<DocumentSnapshot> allDocs = snapshot.documents;
// now here we get the data in respect of year
List<DocumentSnapshot> yearDocs = allDocs.where((e) =>
DateTime.fromMillisecondsSinceEpoch(e.data["createdAt"].seconds * 1000).year == DateTime.now().year).toList();
print(yearDocs.length);
// iterate over your yearDocs, and add the data to documents
yearDocs.forEach((item){
documents.add(item);
});
print(documents.length);
});
}
Остальное будет нормально, вы можете заполнить данные в соответствии с documents.length
. Пожалуйста, дайте мне знать, помогло ли это вам. :) Это также поможет вам понять => Класс DateTime