#flutter #flutter-web
#flutter #flutter-web
Вопрос:
У меня есть два указателя даты для начальной и конечной дат. Когда нет группы классов, начальная дата для средства выбора даты окончания использует начальную дату, и проверка конечной даты работает отлично, но если есть группа классов и дата для конечной даты, начальная дата использует конечную дату, но проверка bool не работает. Все, чего я хочу добиться, это отключить некоторые даты, чтобы конечная дата не была меньше начальной.
Ниже приведен код для двух отдельных средств выбора даты.
_pickStartTime(BuildContext context) {
FocusScope.of(context).requestFocus(new FocusNode());
showDatePicker(
context: context,
firstDate: DateTime(DateTime.now().year - 5),
lastDate: DateTime(DateTime.now().year 5),
initialDate: startPeriod,
builder: (BuildContext context, Widget child) {
return Theme(
data: ThemeData.light().copyWith(
primaryColor: AzuraColors.teal,
accentColor: AzuraColors.teal,
colorScheme: ColorScheme.light(primary: AzuraColors.teal),
buttonTheme: ButtonThemeData(textTheme: ButtonTextTheme.primary),
),
child: child,
);
},
).then((date) {
if (date != null amp;amp; date != startPeriod) {
setState(() {
startPeriod = date;
_startPeriodController.value = TextEditingValue(
text: DateFormat.yMMMM().format(date).toString());
});
}
});
}
_pickEndTime(BuildContext context) {
FocusScope.of(context).requestFocus(new FocusNode());
ClassGroup classGroup = widget.modelData.mClassGroup;
bool _decideWhichDayToEnable(DateTime day) {
if (startPeriod != null amp;amp; day != null amp;amp; startPeriod.isAfter(day)) {
return false;
}
return true;
}
showDatePicker(
context: context,
firstDate: DateTime(DateTime.now().year - 5),
lastDate: DateTime(DateTime.now().year 5),
initialDate: classGroup != null ? endPeriod : startPeriod,
selectableDayPredicate: _decideWhichDayToEnable,
builder: (BuildContext context, Widget child) {
return Theme(
data: ThemeData.light().copyWith(
primaryColor: AzuraColors.teal,
accentColor: AzuraColors.teal,
colorScheme: ColorScheme.light(primary: AzuraColors.teal),
buttonTheme: ButtonThemeData(textTheme: ButtonTextTheme.primary),
),
child: child,
);
},
).then((date) {
if (date != null amp;amp; date != endPeriod) {
setState(() {
endPeriod = date;
_endPeriodController.value = TextEditingValue(
text: DateFormat.yMMMM().format(date).toString());
});
}
});
}
Комментарии:
1. Честно говоря, я не мог понять ваш вопрос.
2. @Alex. Если у меня есть два отдельных средства выбора даты. Один для даты начала, а другой для даты окончания. Выбранная дата окончания не должна быть меньше даты начала.
3. Я думаю, что вам нужно разбить проблему на отдельные вопросы. Потому что это все еще не ясно. Если вы хотите отключить определенные даты в средстве выбора даты, это может быть вопросом само по себе. Или, может быть, вы хотите знать, как проверить дату после ее выбора. Короткие и краткие вопросы дают наилучшие ответы.
4. Рассматривали ли вы возможность использования DateRangePicker?
5. @RichardHeap Да, но клиент настаивает на использовании отдельных наборов дат.