Android 如何检查文本字段中输入的日期在Dart/FLIFT中是否有效?

Android 如何检查文本字段中输入的日期在Dart/FLIFT中是否有效?,android,flutter,dart,Android,Flutter,Dart,我在3个文本字段中选择了日、月和年,但没有DateTime属性或函数提供验证 我使用了DateTime.parse(str)来获取日期,但是如果输入的月份字段也超过12天,它会将剩余的月份添加到年中 bool isDate(String str) { try { DateTime.parse(str); return true; } catch (e) { return false; } } 我想如果有人在字符串中输入'20053050'是false而不是t

我在3个文本字段中选择了日、月和年,但没有DateTime属性或函数提供验证

我使用了DateTime.parse(str)来获取日期,但是如果输入的月份字段也超过12天,它会将剩余的月份添加到年中

bool isDate(String str) {
  try {
    DateTime.parse(str);
    return true;
  } catch (e) {
    return false;
  }
}
我想如果有人在字符串中输入'20053050'是false而不是true。 但是这个函数总是返回真的


日期时间构造函数允许无效范围似乎是一个问题:

以下是一个解决方法:

您可以这样使用它:

bool isValidDate(String input) {
  try {
    final date = DateTime.parse(input);
    final originalFormatString = toOriginalFormatString(date);
    return input == originalFormatString;
  } catch(e) {
    return false;
  }
}

String toOriginalFormatString(DateTime dateTime) {
  final y = dateTime.year.toString().padLeft(4, '0');
  final m = dateTime.month.toString().padLeft(2, '0');
  final d = dateTime.day.toString().padLeft(2, '0');
  return "$y$m$d";
}

您可以尝试将日期收集为字符串(例如,
string\u enteredDate
),并使用
DateFormat
和您的格式设置首选项将其转换为所需的日期格式,并使用
DateTime.parse来解析字符串。例如:

_formattedDate = DateFormat('MM-dd-yyyy').format(DateTime.parse(_enteredDate))

如果用户输入了无效的日期格式,则应该有一个错误,您可以捕获并发出警报。

现在有一个简单的方法可以尝试。这就是方法。 对于无效的日期格式,它只返回null

if(DateTime.tryParse(timeString) != null){
  DateTime date = DateTime.parse(timeString);
}

如果您只是在寻找一种方便的方式从用户那里获取某个日期,那么有两个好的软件包可以让这变得更容易-可以签出或使用
DateTime.tryParse(str)