#flutter #datetime #dart
#flutter #дата и время #dart
Вопрос:
В классе у меня есть списки, в этих списках у меня есть карты, каждая карта имеет элемент ‘interval’ и ‘time’, я хочу проверить, какой из этих элементов ‘time’ истек, а затем передать эти списки для дальнейшей сортировки в соответствии с интервалом (эта сортировка уже работает), простоне уверен, как проверить, в каких списках истекло «время» в них?
В коде, который я пометил с помощью //TODO, отсутствует часть
Спасибо
class QuizBrain {
List<Map<String, dynamic>> products = [
{
'id': 24,
'interval': 10000,
'time': '2021-12-14 20:37:21.190473',
},
{
'id': 36,
'interval': 20000,
'time': '2020-11-14 20:37:21.190453',
},
{
'id': 48,
'interval': 30000,
'time': '2020-12-14 20:37:21.190453',
},
];
min() {
//TODO need to set condition to check which lists 'time' is expired, then i pass those that 'time is expired to further sorting beneath
if (products != null amp;amp; products.isNotEmpty) {
products.sort((a, b) => a['interval'].compareTo(b['interval']));
//print(products);
return (products.first['id']);
}
}
}
Ответ №1:
Вы должны быть в состоянии преобразовать time
атрибуты в DateTime
объекты и сравнить их с текущими, используя compareTo
:
final now = DateTime.now();
final expired = products.where((item) {
final itemTime = DateTime.parse(item["time"]);
return itemTime.compareTo(now) < 0;
});
Затем, если я правильно прочитал ваш вопрос, вам просто нужно заменить products
на expired
в вашем заявлении if.
Это взято из документов compareTo()
:
this.compareTo(other)
Сравнивает этот объект DateTime с [other], возвращая ноль, если значения равны.
Возвращает отрицательное значение, если это DateTime [isBefore] [other] . Он возвращает 0, если он [isAtSameMomentAs] [other], и возвращает положительное значение в противном случае (когда this [isAfter] [other] ).
Комментарии:
1. Спасибо за ваш ответ, это выглядит очень многообещающе, хотя OrElse: выдает ошибку: именованный параметр ‘OrElse’ не определен. (undefined_named_parameter в [midi_app] lib/trainer.dart:38)
2. Ах, извините за это! Это моя ошибка, я обновил ответ, не должно быть
orElse
. Это только дляfirstWhere
, а не где. Я привык кfirstWhere
тому, что в коде, который я пишу, поэтому набрал его по умолчанию, извините!3. Спасибо за быстрый ответ, работал раньше, проверю, пробовал уже без OrElse, и это работало, но у меня все еще есть некоторые проблемы с реализацией всего этого, поэтому я не был уверен, что все работает правильно, также проверил, синтаксис был правильным, так что да, это не понадобилось. Сейчас я работаю над этим, и если я заставлю его работать, я приму ваш ответ, еще раз спасибо