我正在为事件编写应用程序代码,我整天都被禁用,除了Sats以外
它可以正常工作,但是如果dataSicker中的默认值不是Sat或今天是Sat,则如何设置今天之后的第一个Sat的初始日期会遇到问题
还有如何禁用今天甚至是Sats之前的所有日期。
这是我的代码
DateTime _dateTime=DateTime.now();
showDatePicker(
context: context,
initialDate:_dateTime.weekday == 1||_dateTime.weekday == 2||_dateTime.weekday == 3||_dateTime.weekday == 4||_dateTime.weekday == 5 ? DateTime(DateTime.now().year, DateTime.now().month, 1) : _dateTime,
firstDate: DateTime(2019),
lastDate: DateTime(2020),
selectableDayPredicate: (val)=> val.weekday == 1 ||val.weekday == 2 ||val.weekday == 3 ||val.weekday == 4 || val.weekday == 5 ? false : true,
);
此代码可以完美运行,但如果今天不是星期六,则默认日期时间为一年的第一天作为默认日期。 您能帮忙解决这个问题吗?
答案 0 :(得分:1)
从您的问题中得出的结论是,这是您的要求:
操作方法:
除了Sats以外全天禁用
还有如何禁用今天甚至是Sats之前的所有日期
为今天之后的第一个星期六设置初始日期
或今天(如果它是dataPicker中的默认值)
bool defineSelectable(DateTime val) {
DateTime now = DateTime.now();
// disabled all days before today
if (val.isBefore(now)) {
return false;
}
// disabled all days except Sats
switch (val.weekday) {
case saturday:
return true;
break;
default:
return false;
}
}
void handleButton(context) async {
DateTime chosenDate = await showDatePicker(
...
selectableDayPredicate: defineSelectable,
);
}
int daysToAdd(int todayIndex, int targetIndex) {
if (todayIndex < targetIndex) { // jump to target day in same week
return targetIndex - todayIndex;
} else if (todayIndex > targetIndex) { // must jump to next week
return 7 + targetIndex - todayIndex;
} else {
return 0; // date is matched
}
}
DateTime defineInitialDate() {
DateTime now = DateTime.now();
int dayOffset = daysToAdd(now.weekday, saturday);
return now.add(Duration(days: dayOffset));
}
void handleButton(context) async {
DateTime chosenDate = await showDatePicker(
...
initialDate: defineInitialDate(),
...
);
}
您可以查看此存储库并在本地构建它TimePickerScreen