Flutter 颤振:拾取的日期未显示在文本控制器中

Flutter 颤振:拾取的日期未显示在文本控制器中,flutter,datepicker,Flutter,Datepicker,我是一个初学者,我对日期选取器有一个问题,我一直没有弄清楚:选取的日期不会显示在文本控制器中。拾取的日期正确存储在selectedDate中,但文本控制器不会刷新,它会一直显示今天的日期。对我来说奇怪的是,时间选择器工作得很好。我一直在比较两者,不知道时间选择器做了什么,日期选择器没有 以下是完整的代码: class _DateTimePickerState extends State<DateTimePicker> { double _height; double _wid

我是一个初学者,我对日期选取器有一个问题,我一直没有弄清楚:选取的日期不会显示在文本控制器中。拾取的日期正确存储在selectedDate中,但文本控制器不会刷新,它会一直显示今天的日期。对我来说奇怪的是,时间选择器工作得很好。我一直在比较两者,不知道时间选择器做了什么,日期选择器没有

以下是完整的代码:

class _DateTimePickerState extends State<DateTimePicker> {
  double _height;
  double _width;

  String _setTime, _setDate;

  String _hour, _minute, _time;

  String dateTime;

  DateTime selectedDate = DateTime.now();

  TimeOfDay selectedTime = TimeOfDay(hour: 00, minute: 00);

  TextEditingController _dateController = TextEditingController();
  TextEditingController _timeController = TextEditingController();


  var dateValue = TextEditingController();

   Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: selectedDate,
        initialDatePickerMode: DatePickerMode.day,
        firstDate: DateTime(2015),
        lastDate: DateTime(2101));
    if (picked != null)
      setState(() {
        selectedDate = picked;

      });
  }

  Future<Null> _selectTime(BuildContext context) async {
    final TimeOfDay picked = await showTimePicker(

      context: context,

      initialTime: selectedTime,
        builder: (context, child) {
          return MediaQuery(
            data: MediaQuery.of(context)
                .copyWith(alwaysUse24HourFormat: true),
            child: child,
          );
        },
    );
    if (picked != null)
      setState(() {

        selectedTime = picked;
        _hour = selectedTime.hour.toString();
        _minute = selectedTime.minute.toString();
        _time = _hour + ' : ' + _minute;
        _timeController.text = _time;
        _timeController.text = formatDate(
            DateTime(2019, 08, 1, selectedTime.hour, selectedTime.minute),
            [HH, ':', nn, " "]).toString();

      });
  }

  @override
  void initState() {
    _dateController.text = DateFormat.yMd().format(DateTime.now());
    //_dateController.text = dateValue.text;


    _timeController.text = formatDate(
        DateTime(2019, 08, 1, DateTime.now().hour, DateTime.now().minute),
        [HH, ':', nn, " "]).toString();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {

    _height = MediaQuery.of(context).size.height;
    _width = MediaQuery.of(context).size.width;
    dateTime = DateFormat.yMd().format(DateTime.now());
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text((globals["selected_person_name"])),
      ),
      backgroundColor: Colors.grey[900],
      body: Container(
        width: _width,
        height: _height,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: <Widget>[
            Column(
              children: <Widget>[
                Text(
                  'Choisir la Date',
                    style: TextStyle(
                        color: Colors.grey[100],
                        //fontWeight: FontWeight.bold,
                        fontSize: 20)
                ),

                InkWell(
                  onTap: ()  {
                   _selectDate(context);
                  },
                  child: Container(
                    width: _width / 1.7,
                    height: _height / 9,
                    margin: EdgeInsets.only(top: 30),
                    alignment: Alignment.center,
                    decoration: BoxDecoration(color: Colors.grey[200]),
                    child: TextFormField(
                      style: TextStyle(fontSize: 40),
                      textAlign: TextAlign.center,
                      enabled: false,
                      keyboardType: TextInputType.text,
                      controller: _dateController,
                      onSaved: (String valD) {
                        _setDate = valD;

                      },
                      decoration: InputDecoration(
                          disabledBorder:
                          UnderlineInputBorder(borderSide: BorderSide.none),
                          // labelText: 'Time',
                          contentPadding: EdgeInsets.only(top: 0.0)),
                    ),
                  ),
                ),
              ],
            ),
            Column(
              children: <Widget>[
                Text(
                  'Choisir l\'heure',
                    style: TextStyle(
                        color: Colors.grey[100],
                        //fontWeight: FontWeight.bold,
                        fontSize: 20)
                ),
                InkWell(
                  onTap: () {
                    _selectTime(context);

                  },
                  child: Container(
                    margin: EdgeInsets.only(top: 30),
                    width: _width / 1.7,
                    height: _height / 9,
                    alignment: Alignment.center,
                    decoration: BoxDecoration(color: Colors.grey[200]),
                    child: TextFormField(
                      style: TextStyle(fontSize: 40),
                      textAlign: TextAlign.center,
                      onSaved: (String val) {
                        _setTime = val;
                        },
                      enabled: false,
                      keyboardType: TextInputType.text,
                      controller: _timeController,
                      decoration: InputDecoration(
                          disabledBorder:
                          UnderlineInputBorder(borderSide: BorderSide.none),
                          // labelText: 'Time',
                          contentPadding: EdgeInsets.all(5)),

                    ),
                  ),
                ),

              ],

            ),
class\u日期时间选择器状态扩展状态{
双倍高度;
双倍宽度;
字符串_setTime,_setDate;
字符串(小时),(分钟),(时间);;
字符串日期时间;
DateTime selectedDate=DateTime.now();
TimeOfDay selectedTime=日期时间(小时:00,分钟:00);
TextEditingController _dateController=TextEditingController();
TextEditingController_timeController=TextEditingController();
var dateValue=TextEditingController();
Future\u selectDate(BuildContext上下文)异步{
选择的最终日期时间=等待showDatePicker(
上下文:上下文,
初始日期:selectedDate,
initialDatePickerMode:DatePickerMode.day,
firstDate:DateTime(2015年),
lastDate:DateTime(2101));
如果(已拾取!=null)
设置状态(){
selectedDate=已拾取;
});
}
Future\u selectTime(构建上下文)异步{
最终拾取的日期时间=等待显示时间选择器(
上下文:上下文,
初始时间:选择的时间,
生成器:(上下文,子对象){
返回MediaQuery(
数据:MediaQuery.of(上下文)
.copyWith(始终使用24小时格式:true),
孩子:孩子,
);
},
);
如果(已拾取!=null)
设置状态(){
selectedTime=已拾取;
_小时=所选的time.hour.toString();
_分钟=selectedTime.minute.toString();
_时间=_小时+':'+_分钟;
_timeController.text=\u时间;
_timeController.text=格式化日期(
日期时间(2019、08、1、selectedTime.hour、selectedTime.minute),
[HH',:',nn,“].toString();
});
}
@凌驾
void initState(){
_dateController.text=DateFormat.yMd().format(DateTime.now());
//_dateController.text=dateValue.text;
_timeController.text=格式化日期(
DateTime(2019,08,1,DateTime.now().hour,DateTime.now().minute),
[HH',:',nn,“].toString();
super.initState();
}
@凌驾
小部件构建(构建上下文){
_height=MediaQuery.of(context).size.height;
_宽度=MediaQuery.of(context).size.width;
dateTime=DateFormat.yMd().format(dateTime.now());
返回脚手架(
appBar:appBar(
标题:对,
标题:文本((globals[“selected_person_name”]),
),
背景颜色:颜色。灰色[900],
主体:容器(
宽度:_宽度,
高度:_高度,
子:列(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
纵队(
儿童:[
正文(
“日期先生”,
样式:TextStyle(
颜色:颜色。灰色[100],
//fontWeight:fontWeight.bold,
(尺寸:20)
),
墨水池(
onTap:(){
_选择日期(上下文);
},
子:容器(
宽度:_宽度/1.7,
高度:_高度/9,
页边空白:仅限边集(前30页),
对齐:对齐.center,
装饰:盒子装饰(颜色:Colors.gray[200]),
子项:TextFormField(
样式:TextStyle(字体大小:40),
textAlign:textAlign.center,
启用:false,
键盘类型:TextInputType.text,
控制器:_dateController,
onSaved:(字符串值){
_setDate=valD;
},
装饰:输入装饰(
禁用顺序:
UnderlineInputBorder(borderSide:borderSide.none),
//labelText:“时间”,
contentPadding:EdgeInsets.only(顶部:0.0)),
),
),
),
],
),
纵队(
儿童:[
正文(
“唱诗班先生,我是‘heure’”,
样式:TextStyle(
颜色:颜色。灰色[100],
//fontWeight:fontWeight.bold,
(尺寸:20)
),
墨水池(
onTap:(){
_选择时间(上下文);
},
子:容器(
页边空白:仅限边集(前30页),
宽度:_宽度/1.7,
高度:_高度/9,
对齐:对齐.center,
装饰:盒子装饰(颜色:Colors.gray[200]),
子项:TextFormField(
样式:TextStyle(字体大小:40),
textAlign:textAlign.center,
onSaved:(字符串val){
_设置时间=val;
},
启用:false,
键盘类型:TextInputType.text,
控制器:_timeController,
装饰:输入装饰(
禁用顺序:
UnderlineInputBorder(borderSide:borderSide.none),
//labelText:“时间”,
contentPadding:EdgeInsets.all(5)),
Future<Null> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
    context: context,
    initialDate: selectedDate,
    initialDatePickerMode: DatePickerMode.day,
    firstDate: DateTime(2015),
    lastDate: DateTime(2101));
if (picked != null)
  setState(() {
    selectedDate = picked;
    _dateController.text = DateFormat.yMd().format(selectedDate);
  });