После 2 дней непрерывных исследований, тестирования и попыток - я обращаюсь за столь необходимой помощью!
Я запрашиваю коллекцию Firestore и возвращаю записи, соответствующие запросу (всегда будет только ноль или один результат), где поле UserId соответствует зарегистрированному uid. Это прекрасно работает. Следующим шагом является проверка поля ввода даты, которое является меткой времени в коллекции, в этом отчете и сравнение его с датой и временем на данный момент.
Затем мне нужно перейти на один уровень дальше и выполнить второй запрос, по сути:
- если есть совпадение записи И поле даты равно => сейчас, то отобразить x;
- если есть совпадение записи И поле даты имеет значение ›= сейчас, то отобразить y;
- или же, если совпадений записи нет, то вывести z;
Я не могу понять, что это за сообщение об ошибке, и как лучше всего проверить дату после запроса, чтобы увидеть, находится ли она в прошлом (и отображать x) или в будущем (и отображать y)?
Следующий код не вызывает ошибок в Android Studio, и приложение может работать, но сообщение об ошибке в консоли:
Class 'DateTime' has no instance method 'Timestamp'.
Receiver: Instance of 'DateTime'
Tried calling: compareto(Instance of 'DateTime')
Код:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('collectionDatabase')
.where('uid', isEqualTo: _auth.currentUser.uid)
.snapshots(),
builder: (context, snapshot) {
List<Widget> statusExample = [];
if (snapshot.hasData) {
final cover = snapshot.data.docs;
for (var coverIn in cover) {
final singleDate = coverIn.data()['endDate'].toDate();
final endDate = coverIn.data()['endDate']
.toDate()
.toString()
.substring(0, 10);
var dateNow = DateTime.now();
final getEndDate = Text('$endDate');
final expiredEndDate = Text('No!');
if (singleDate.compareto(dateNow) > 0) { // this line of code is incorrect - the corrected version of this line is below....
var statusExample = getEndDate;
return StatusDateNow;
} else {
var statusExample = expiredDate;
return StatusDateNow;
}
}
}
return Column(children: StatusDateNow);
}),
ОБНОВЛЕНИЕ
Мне удалось найти решение с помощью flutter.dev — стандартное и передовое решение, по-видимому, заключается в использовании «isAfter» или «isBefore» вместо «.compareto».
Я изменил следующий фрагмент кода на следующий, и он работает:
if (singleDate.isAfter(dateNow) == true) {