Список фильтров Flutter по датам

Итак, я получаю промо-список из API с полем dateStart и dateEnd, которое возвращает ГГГГ-ММ-ДД String или null, если оно пустое. Теперь я хочу сравнить/отфильтровать.

1- имеет dateStart=ГГГГ-ММ-ДД && имеет dateEnd=ГГГГ-ММ-ДД - можно отображать, но если dateEnd == сегодня или позже, то он не будет отображаться

2- имеет dateStart=ГГГГ-ММ-ДД && имеет dateEnd=null - можно отобразить в списке, так как это может быть промо на всю жизнь

3- показывать в списке только в том случае, если dateStart сегодня или уже прошел

не могли бы вы добавить образец для вашего списка?

eamirho3ein 20.11.2022 08:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предположим, это ваш список:

List sampleList = [
    {"dateStart": "2022-11-18", "dateEnd": "2022-11-22"},
    {"dateStart": "2022-11-20", "dateEnd": "2022-11-20"},
    {"dateStart": "2022-10-20", "dateEnd": "2022-11-19"},
    {"dateStart": "2022-10-20", "dateEnd": null},
  ];

поэтому вы можете получить свой список следующим образом:

var result = sampleList.map((e) {
      if (e['dateStart'] != null) {
        DateTime startDate =
            DateFormat("yyyy-MM-dd").parse(e['dateStart'] + ' 23:59');
        DateTime? endDate = e['dateEnd'] != null
            ? DateFormat("yyyy-MM-dd hh:mm").parse(e['dateEnd'] + ' 23:59')
            : null;
        var now = DateTime.now();

        if ((startDate.isBefore(now) || startDate == now) &&
            (endDate == null || endDate.isBefore(now))) {
          return e;
        }
      }
    }).toList();
result.removeWhere((element) => element == null);

print("result = $result");//result = [{dateStart: 2022-10-20, dateEnd: 2022-11-19}, {dateStart: 2022-10-20, dateEnd: null}]

теперь вы можете использовать result, чтобы показать свой список.

Я не знаком с флаттером, но заметил несоответствие: DateFormat("yyyy-MM-dd").parse(e['dateStart'] + ' 23:59'); и DateFormat("yyyy-MM-dd hh:mm").parse(e['dateEnd'] + ' 23:59')

Christian Abila 20.11.2022 08:51
e['dateStart'] + ' 23:59' должно быть e['dateStart'] + ' 00:00' наверное
OMi Shah 20.11.2022 08:53

@ChristianAbila причина, по которой я добавляю 23:59, заключается в том, что ОП хочет пропустить дату, равную сегодняшнему дню, и когда мы преобразуем «2022-11-20» в формат даты и времени, преобразователь добавляет 00:00, потому что час и минута пусты и в isBefore, поскольку 00 меньше текущего часа, условие не будет работать корректно. Летом я добавляю 23:59, чтобы убедиться, что выбранная дата находится в конце дня, поэтому можно удалить сегодняшнюю дату в функции isBefore.

eamirho3ein 20.11.2022 09:15

@OMiShah нет, проверьте комментарий выше.

eamirho3ein 20.11.2022 09:18

@eamirho3ein @eamirho3ein, я думаю, вам следует еще раз прочитать вопрос, так как ОП хочет отфильтровать данные по типу 3, как уже упоминалось. Или может быть я не понял :p

OMi Shah 20.11.2022 09:31

@user3352042 user3352042 ты этого хотел?

eamirho3ein 20.11.2022 09:39

Другие вопросы по теме