Установка дат начала и окончания с помощью datepicker в flutter

#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 Да, но клиент настаивает на использовании отдельных наборов дат.