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