Flutter 检查输入的日期是否小于18年

Flutter 检查输入的日期是否小于18年,flutter,dart,Flutter,Dart,我设法从18年前的今天得到了日期: var formatter = DateFormat('dd/MM/yyyy'); DateTime today = DateTime.now(); final eighteenY = DateTime(today.year - 18, today.month, today.day); 但现在我需要检查用户输入的日期是否在该日期和今天之间,如果是,则他们未超过18岁。我该怎么办?这是我的密码: MaskedTextController _maskDOB

我设法从18年前的今天得到了日期:

var formatter = DateFormat('dd/MM/yyyy');

DateTime today = DateTime.now();
final eighteenY = DateTime(today.year - 18, today.month, today.day);

但现在我需要检查用户输入的日期是否在该日期和今天之间,如果是,则他们未超过18岁。我该怎么办?这是我的密码:


MaskedTextController _maskDOBController =
MaskedTextController(mask: '00/00/0000');

@override
  Widget build(BuildContext context) {

return Scaffold(

body:

return Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
  Container(
    height: 48,
    width: 500,
    child: TextFormField(
      controller: _maskDOBController,
      onChanged: (string){
           setState(() {
             provider.dobString = string;
             dobError = false;
             });
           },
        ),
     ),
   ],
 ),
),

Container(height: 80),

Container(
  GestureDetector(
    onTap: (){
      // if the date a user enters in textfield is between that date and today's date
      // print('user is underage');
    }
    child: Text(
     'Continue'
    ),
  ),
);


这个问题是重复的,但我有一个解决方案,我现在使用,我喜欢我觉得值得分享

您可以使用扩展将函数设置为DateTime。例如:

DateTime上的扩展DateTimeX{ bool isUnderage()=> (DateTime(DateTime.now().year,this.month,this.day) .isAfter(DateTime.now()) ?DateTime.now().year-this.year-1 :DateTime.now().year-this.year)<18; } void main(){ final today=DateTime.now(); 最后十七天=日期时间(今天.year-18,今天.month,今天.day+1); 最终十八日=日期时间(今天.year-18,今天.month,今天.day); 打印(今天,isUnderage()); 印刷品(十七岁,未成年(); 印刷品(18岁未成年人()); }
值得注意的是,这不需要
intl
或任何其他外部包。将此项粘贴到中进行测试。

这是否回答了您的问题?是的,很好,谢谢你。实际上我还没有试过你的答案,但是评论把我和这个问题的第一个答案联系起来了,不客气!大多数解决方案都是可行的,这完全取决于你喜欢什么样的语法。你应该小心使用.utc,否则你可能会跨越DST边界,这会搞砸比较。