如何验证 DateTime 以便结束日期不能早于开始日期?

How to validate DateTime so that end date cannot be before start date?

我制作了一个提供所选日期值的自定义小部件,因此我一直在使用两个具有 showDatePicker 函数的文本字段(这是我的自定义小部件),我尝试使用函数 showDatePicker 的参数 firstdate作为第二个文本字段的参数,即结束日期,所以我需要验证如果用户选择了开始日期,那么结束日期不能早于开始日期,这两个日期的值都分配给了我与提供者管理的变量。我将响应作为字符串接收,然后转换这两个值以与 isBefore 或 isAfter 进行比较。

自定义控件

class _DateFilterState extends State<_DateFilter> {
  final TextEditingController _textEditingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return TextField(
      enableInteractiveSelection: false,
      decoration: InputDecoration(labelText: widget.title),
      focusNode: AlwaysDisabledFocusNode(),
      controller: _textEditingController,
      onTap: () {
        _selectDate(context);
        setState(() {});
      },
    );
  }

  _selectDate(context) async {
    DateTime? selectedDate = await showDatePicker(
      context: context,
      initialDate: widget.initialDate,
      firstDate: widget.firstDate ?? DateTime(2015),
      lastDate: widget.lastDate ?? DateTime.now(),
    );
    if (selectedDate != null) {
      _textEditingController.text = DateFormat('dd/MM/yyyy').format(selectedDate);
      widget.onChanged(_textEditingController.text);
    }
  }
}

验证结束日期

            Row(
                children: [
                  Flexible(
                      child: _DateFilter(
                    onChanged: (value) => authsProvider.dateStart = value,
                    title: 'Start date',
                    initialDate: DateTime.now(),
                  )),
                  const SizedBox(width: 10),
                  Flexible(
                      child: _DateFilter(
                    title: 'End date',
                    onChanged: (value) => authsProvider.dateEnd = value,
                    initialDate: DateTime.now(),
                    firstDate: provider.dateSelected =
                        provider.dateStart.isNotEmpty && formatter.parse(authsProvider.dateEnd).isAfter(formatter.parse(provider.dateStart))
                            ? formatter.parse(provider.dateStart)
                            : DateTime(2015),
                    lastDate: DateTime.now(),
                  )),

有谁知道如何正确验证?我很困惑,我知道还有其他方法可以更好地管理日期范围,但它们是必需的。

你应该使用 DateTime。

DateTime dateStart = DateTime.now(); //YOUR DATE GOES HERE
DateTime dateEnd = DateTime.now(); // YOUR DATE GOES HERE
bool isValidDate = dateStart.isBefore(dateEnd);