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

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

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

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

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

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

eamirho3ein 20.11.2022 08:22
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
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

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