如何在Flutter中使用DateFormat选择出生日期?

时间:2019-08-14 11:48:16

标签: flutter dart

我有一个出生日期格式的字段。

我尝试了一些代码,但是它同时显示日期和时间,但是我只想要日期。

有什么完美的方法吗?

变量

String initValue="Select your Birth Date";
bool isDateSelected= false;
DateTime birthDate; // instance of DateTime
String birthDateInString;

这里是dateTime选择器的代码。

GestureDetector(
   child: new Icon(Icons.calendar_today),
   onTap: ()async{
     final datePick= await showDatePicker(
        context: context,
        initialDate: new DateTime.now(),
        firstDate: new DateTime(1900),
        lastDate: new DateTime(2100)
       );
    if(datePick!=null && datePick!=birthDate){
      setState(() {
        birthDate=datePick; 
        isDateSelected=true;
        birthDateInString = "${birthDate.month}/${birthDate.day}/${birthDate.year}"; 
      });
     }
   }
 )

此小部件用于显示日期

 new Text(isDateSelected ? "$birthDate":initValue),

2 个答案:

答案 0 :(得分:2)

定义一个变量。

String birthDateInString;

然后在您的onTap

中为其赋值
birthDateInString = "${birthDate.month}/${birthDate.day}/${birthDate.year}"; // 08/14/2019

更新:

GestureDetector(
    child: new Icon(Icons.calendar_today),
    onTap: ()async{
      final datePick= await showDatePicker(
          context: context,
          initialDate: new DateTime.now(),
          firstDate: new DateTime(1900),
          lastDate: new DateTime(2100)
      );
      if(datePick!=null && datePick!=birthDate){
        setState(() {
          birthDate=datePick;
          isDateSelected=true;

          // put it here
          birthDateInString = "${birthDate.month}/${birthDate.day}/${birthDate.year}"; // 08/14/2019

        });
      }
    }
)

答案 1 :(得分:0)

最好使用DateFormat(来自intl包)而不是手动形成显示字符串。这样,您可以本地化日期。例如

import 'package:intl/intl.dart';
....
new Text(isDateSelected ? DateFormat.yMMMd().format(birthDate) : initValue)

飞镖参考:https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html

您需要为用例使用正确的格式化程序。