如何使用SelectableDayPredicate将DatePicker限制为仅工作日?

时间:2018-08-04 07:55:52

标签: datetime dart flutter datetimepicker

我已经在Flutter应用程序中实现了DatePicker。我试图将选择器限制为仅允许用户选择工作日。但是,我不确定如何执行此操作。我相信这与SelectableDayPredicate有关。以下是我的代码段:

Future<Null> _selectDate(BuildContext context) async {
  final DateTime picked = await showDatePicker(
    context: context,
    initialDate: _date,
    firstDate: new DateTime(DateTime.now().year),
    lastDate: new DateTime(DateTime.now().year+1),
    // to do: I am pretty sure the SelectableDayPredicate should go somewhere here.
  );

  if (picked != null && picked != _date) {
    setState(() {
      _date = picked;
    });
  }
}

当用户点击listTile时,将调用_selectDate函数。

2 个答案:

答案 0 :(得分:3)

在此示例中,我从选择器中省略了星期五和星期六,您可以按照此处的逻辑来实现所需的目标:

selectableDayPredicate: (DateTime val) =>
            val.weekday == 5 || val.weekday == 6 ? false : true,

答案 1 :(得分:1)

谢谢!

但是,对于日期选择器,您必须提供一个initialValue,它可能应该是  “今天”,但是如果“今天”是周末,那么您将获得例外!

因此,在这种情况下,我将首字母设置为每月的第一天

    initialDate: _dateTime.weekday == 5 || _dateTime.weekday == 6 ? DateTime(DateTime.now().year, DateTime.now().month, 1) :  _dateTime ,
    selectableDayPredicate: (DateTime val) =>
    val.weekday == 5 || val.weekday == 6 ? false : true,