Здравствуйте, как проверить, в каких списках в классе есть элемент истекшего времени?

#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, и это работало, но у меня все еще есть некоторые проблемы с реализацией всего этого, поэтому я не был уверен, что все работает правильно, также проверил, синтаксис был правильным, так что да, это не понадобилось. Сейчас я работаю над этим, и если я заставлю его работать, я приму ваш ответ, еще раз спасибо