首页 > 解决方案 > Flutter - 如何将日期列表传递给 showDatePicker 中的 selectableDayPredicate?

问题描述

我正在使用以下代码使某些日期(本示例中为 6 月 24 日和 6 月 25 日)能够从 DatePicker 中进行选择。

   final DateTime picked = await showDatePicker(
            context: context,
            initialDate: DateTime(2020, 6, 24),
            firstDate: DateTime(2020, 6, 24),
            lastDate: DateTime(2101),
          selectableDayPredicate: (DateTime val) =>
          val == DateTime(2020, 6, 24) || val == DateTime(2020, 6, 25) ? true : false,
        );

请注意,它们val == DateTime(2020, 6, 24) || val == DateTime(2020, 6, 25)是硬编码的。我有一个日期列表,如何将其传递给selectableDayPredicate?我按照Anoop的建议尝试了以下方法,但它不起作用。

List<DateTime> _dates = List();
_dates.add(DateTime(2020, 6, 24));
_dates.add(DateTime(2020, 6, 25));

 final DateTime picked = await showDatePicker(
        context: context,
        initialDate: DateTime(2020, 6, 24),
        firstDate: DateTime(2020, 6, 24),
        lastDate: DateTime(2101),
      selectableDayPredicate: (DateTime val) =>
          _dates.contains(_dates),
    );

我得到了错误:

'selectableDayPredicate == null || selectableDayPredicate(initialDate)': Provided initialDate 2020-06-24 00:00:00.000 must satisfy provided selectableDayPredicate.

标签: flutterdart

解决方案


如果列表是 DateTime 格式,只需使用 List contains 方法

List<DateTime> dates = List(); //list of dates
final DateTime picked = await showDatePicker(
      context: context,
      initialDate: DateTime(2020, 6, 24),
      firstDate: DateTime(2020, 6, 24),
      lastDate: DateTime(2101),
      selectableDayPredicate: (DateTime val) =>
      dates.contains(val), 
 );

或列表项为字符串格式,通过 DateTime.parse(datestring) 将列表转换为 DateTime


推荐阅读