如何在颤动中获取两个 DateTime 字段与另一个 TextFormField 之间的日期差异

how to get date difference btw two DateTimeField to another TextFormField in flutter

我有两个 DateTimeField,用户将 select 开始日期和结束日期,我希望在它下面的另一个 TextFormField 上显示天数的差异。例如,如果我在 DateFormField 上 select 2020-11-15 作为开始日期,而我在 DateFormField 上 select 2020-11-03 作为结束日期,那么它应该自动显示 12 总天数文本表单字段。下面是我的代码:


TextEditingController _controllerStartDate = TextEditingController();
  TextEditingController _controllerEndDate = TextEditingController();
TextEditingController _controllerTotalDays = TextEditingController();


body: Container{

child: Form{

child:ListView(

children:<widget>[

Text("Start Date:",style: TextStyle(color: colorBlack,fontWeight: FontWeight.bold),),
                    Container(
                        height: 50,
                        padding: EdgeInsets.only(left: 20),
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.all(
                            Radius.circular(5),
                          ),
                          border: Border.all(color: Colors.black, width: 1),
                        ),
                        child:DateTimeField(
                          format: format,
                          controller: _controllerStartDate,
                          decoration: InputDecoration(
                              labelStyle: TextStyle(color: Colors.black)),
                          onShowPicker: (context, currentValue) {
                            return showDatePicker(
                                context: context,
                                firstDate: DateTime(1900),
                                initialDate: currentValue ?? DateTime.now(),
                                lastDate: DateTime(2100));
                          },
                        )
                    ),
                    SizedBox(height: 25.0),

                    Text("End Date:",style: TextStyle(color: colorBlack,fontWeight: FontWeight.bold),),
                    Container(
                        height: 50,
                        padding: EdgeInsets.only(left: 20),
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.all(
                            Radius.circular(5),
                          ),
                          border: Border.all(color: Colors.black, width: 1),
                        ),
                        child:DateTimeField(
                          format: format,
                          controller: _controllerEndDate,
                          decoration: InputDecoration(
                            labelStyle: TextStyle(color: Colors.black)),
                          onShowPicker: (context, currentValue) {
                            return showDatePicker(
                                context: context,
                                firstDate: DateTime(1900),
                                initialDate: currentValue ?? DateTime.now(),
                                lastDate: DateTime(2100));
                          },
                        )
                    ),
                    SizedBox(height: 25.0),

TextFormField(
      autovalidate: _autoValidate,
      validator: validateLength,
      style: style,
      enabled: false,
      keyboardType: TextInputType.text,
      controller: _controllerTotalDays,
      decoration: InputDecoration(
        contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
        labelStyle: new TextStyle(color: colorBlack),
        hintStyle: new TextStyle(color: colorBlack),
        enabledBorder: const OutlineInputBorder(
          borderSide: const BorderSide(color: Colors.black),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Colors.black),
        ),
      ),
    )

]

)

}


} 

从上面的代码中,我希望从两个 DateFormField 中编辑的日期 select 之间的某种运算符差异显示在 Textformfield 上,就像我上面给出的示例一样。

您可以通过以下方式获取

DateTime date1 = DateTime.parse(_controllerEndDate.text);
DateTime date2 = DateTime.parse(_controllerStartDate.text);
var difference = date1.difference(date2).inDays;
print(difference);

确保日期的值不为空