Forms 如何在TextFormField中显示输入时间?

Forms 如何在TextFormField中显示输入时间?,forms,flutter,dart,timepicker,form-fields,Forms,Flutter,Dart,Timepicker,Form Fields,我想做一个表单,这样用户就可以输入约会的日期和时间。 我尝试了一些选项,但只有日期起作用(它显示用户的输入),但时间仍然是空的,即使时间选择器出现,他可以选择他想要的时间。我怎样才能解决这个问题 TextEditingController dateCtl = TextEditingController(); class MyCustomFormState extends State<MyCustomForm> { final _formKey = GlobalKey<Form

我想做一个表单,这样用户就可以输入约会的日期和时间。 我尝试了一些选项,但只有日期起作用(它显示用户的输入),但时间仍然是空的,即使时间选择器出现,他可以选择他想要的时间。我怎样才能解决这个问题

TextEditingController dateCtl = TextEditingController();

class MyCustomFormState extends State<MyCustomForm> {
final _formKey = GlobalKey<FormState>();
DateTime date = DateTime.now();
@override
Widget build(BuildContext context) {
String _formattedate = new DateFormat.yMMMMEEEEd().format(date);
return Form(
  key: _formKey,
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      Padding(
        padding: const EdgeInsets.only(left: 15, right: 15, bottom: 20),
        child: TextFormField(
          controller: dateCtl,
          decoration: InputDecoration(labelText: 'Date*'),
          onTap: () async {
            FocusScope.of(context).requestFocus(new FocusNode());

            DateTime picked = await showDatePicker(
                context: context,
                initialDate: DateTime.now(),
                firstDate: DateTime(2020),
                lastDate: DateTime(2021));
            dateCtl.text = _formattedate.toString();
            if(picked != null && picked != date){
              setState(() {
                date = picked;
              });
            }
          },
          validator: (value) {
            if (value.isEmpty) {
              return 'cant be empty';
            }
            return null;
          },
        ),
      ),
      Padding(
        padding: const EdgeInsets.only(left: 15, right: 15, bottom: 20),
        child: TextFormField(
          decoration: InputDecoration(
            labelText: 'time*',
          ),
          onTap: () async {
            TimeOfDay time = TimeOfDay.now();
            FocusScope.of(context).requestFocus(new FocusNode());

            TimeOfDay picked =
                await showTimePicker(context: context, initialTime: time);
            if (picked != null && picked != time)
              setState(() {
                time = picked;
              });
          },
          validator: (value) {
            if (value.isEmpty) {
              return 'cant be empty';
            }
            return null;
          },
        ),
      ),
    //more code
TextEditingController日期ctl=TextEditingController();
类MyCustomFormState扩展了状态{
final _formKey=GlobalKey();
DateTime date=DateTime.now();
@凌驾
小部件构建(构建上下文){
字符串_formattedate=new DateFormat.ymmmmeeed().format(日期);
报税表(
键:_formKey,
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
填充物(
填充:仅限常量边集(左:15,右:15,下:20),
子项:TextFormField(
控制器:dateCtl,
装饰:输入装饰(标签文本:“日期*”),
onTap:()异步{
FocusScope.of(context).requestFocus(newfocusnode());
已拾取日期时间=等待显示日期选择器(
上下文:上下文,
initialDate:DateTime.now(),
firstDate:DateTime(2020年),
最后日期:日期时间(2021年);
dateCtl.text=_formattedate.toString();
如果(已拾取!=空和已拾取!=日期){
设置状态(){
日期=已拾取;
});
}
},
验证器:(值){
if(value.isEmpty){
返回“不能为空”;
}
返回null;
},
),
),
填充物(
填充:仅限常量边集(左:15,右:15,下:20),
子项:TextFormField(
装饰:输入装饰(
labelText:“时间*”,
),
onTap:()异步{
TimeOfDay time=TimeOfDay.now();
FocusScope.of(context).requestFocus(newfocusnode());
采摘时间=
等待showTimePicker(上下文:上下文,初始时间:时间);
如果(拾取的!=null&&拾取的!=时间)
设置状态(){
时间=已拾取;
});
},
验证器:(值){
if(value.isEmpty){
返回“不能为空”;
}
返回null;
},
),
),
//更多代码

在dateCtl下添加此行

TextEditingController timeCtl = TextEditingController();
并添加两行

child: TextFormField(
  controller: timeCtl,  // add this line.
  decoration: InputDecoration(
    labelText: 'time*',
  ),
  onTap: () async {
    TimeOfDay time = TimeOfDay.now();
    FocusScope.of(context).requestFocus(new FocusNode());

    TimeOfDay picked =
        await showTimePicker(context: context, initialTime: time);
    if (picked != null && picked != time) {
      timeCtl.text = picked.toString();  // add this line.
      setState(() {
        time = picked;
      });
    }
  },
  validator: (value) {
    if (value.isEmpty) {
      return 'cant be empty';
    }
    return null;
  },
),
格式ex1

timeCtl.text = picked.format(context);
例2


在dateCtl下添加此行

TextEditingController timeCtl = TextEditingController();
并添加两行

child: TextFormField(
  controller: timeCtl,  // add this line.
  decoration: InputDecoration(
    labelText: 'time*',
  ),
  onTap: () async {
    TimeOfDay time = TimeOfDay.now();
    FocusScope.of(context).requestFocus(new FocusNode());

    TimeOfDay picked =
        await showTimePicker(context: context, initialTime: time);
    if (picked != null && picked != time) {
      timeCtl.text = picked.toString();  // add this line.
      setState(() {
        time = picked;
      });
    }
  },
  validator: (value) {
    if (value.isEmpty) {
      return 'cant be empty';
    }
    return null;
  },
),
格式ex1

timeCtl.text = picked.format(context);
例2


为什么不将TextEditingController用于日期等时间的TextFormField?我这样做了,但不起作用,所以我删除了它。你知道正确的方法吗?谢谢为什么不将TextEditingController用于日期等时间的TextFormField?我这样做了,但不起作用,所以我删除了它。你知道正确的方法吗?谢谢谢谢!!真的有用但是输出是“TimeOfDay(3:48)”有办法只显示时间吗?谢谢!!它确实有效,但输出是“TimeOfDay(3:48)”有办法只显示时间吗?