Flutter 在flatter中,如何在文本字段的onclick上而不是键盘上显示日期选择器?
希望在单击Flutter 在flatter中,如何在文本字段的onclick上而不是键盘上显示日期选择器?,flutter,Flutter,希望在单击TextFormField而不是键盘时显示日期选择器。我尝试过使用手势检测器,但没有达到预期效果 DateTime _date = new DateTime.now(); TimeOfDay _time = new TimeOfDay.now(); Future<Null> _selectedDate(BuildContext context) async { final DateTime picked = await showDatePicker( co
TextFormField
而不是键盘时显示日期选择器。我尝试过使用手势检测器
,但没有达到预期效果
DateTime _date = new DateTime.now();
TimeOfDay _time = new TimeOfDay.now();
Future<Null> _selectedDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: _date,
firstDate: new DateTime(2016),
lastDate: new DateTime(2019));
if (picked != null && picked != _date) {
print("Date selected ${_date.toString()}");
setState(() {
_date = picked;
});
}
}
......
new GestureDetector(
onTap: (){
_selectedTime(context);
},
child:
new TextFormField(
initialValue: convertToDate(_date),
decoration: const InputDecoration(
icon: const Icon(Icons.calendar_today),
hintText: 'Enter your date of event',
labelText: 'Date',
),
keyboardType: null,
),
),
DateTime\u date=new DateTime.now();
TimeOfDay _time=新的TimeOfDay.now();
Future\u selectedDate(构建上下文)异步{
选择的最终日期时间=等待showDatePicker(
上下文:上下文,
初始日期:_日期,
firstDate:新日期时间(2016年),
最后日期:新日期时间(2019年);
如果(已拾取!=null&&picked!=\u日期){
打印(“所选日期${u Date.toString()}”);
设置状态(){
_日期=已拾取;
});
}
}
......
新手势检测器(
onTap:(){
_选择时间(上下文);
},
儿童:
新TextFormField(
initialValue:convertToDate(_日期),
装饰:常量输入装饰(
图标:const图标(今天的图标、日历),
hintText:'输入您的活动日期',
labelText:'日期',
),
键盘类型:null,
),
),
您可以使用AbsorbPointer
包装TextField
,因此您的小部件树将如下所示:
GestureDetector(
onTap:()=>showDialog(),
child:AbsorbPointer(
child: MyTextField(),
)
)
您可以使用
AbsorbPointer
包装TextFormField
(请参阅)。它将“吸收”子对象上传入的标准行为,因此单击TextFormField将不起任何作用。如果现在使用GestureDetector
包装AbsorbPointer
,则可以使用onTap()
方法调用showDatePicker方法
DateTime selectedDate = DateTime.now();
TextEditingController _date = new TextEditingController();
Future<Null> _selectDate(BuildContext context) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(1901, 1),
lastDate: DateTime(2100));
if (picked != null && picked != selectedDate)
setState(() {
selectedDate = picked;
_date.value = TextEditingValue(text: picked.toString());
});
}
// inside Widget build
GestureDetector(
onTap: () => _selectDate(context),
child: AbsorbPointer(
child: TextFormField(
controller: _date,
keyboardType: TextInputType.datetime,
decoration: InputDecoration(
hintText: 'Date of Birth',
prefixIcon: Icon(
Icons.dialpad,
color: _icon,
),
),
),
),
);
DateTime selectedDate=DateTime.now();
TextEditingController_date=新的TextEditingController();
Future\u selectDate(BuildContext上下文)异步{
选择的最终日期时间=等待showDatePicker(
上下文:上下文,
初始日期:selectedDate,
firstDate:DateTime(1901,1),
lastDate:DateTime(2100));
如果(已拾取!=null&&picked!=selectedDate)
设置状态(){
selectedDate=已拾取;
_date.value=TextEditingValue(文本:picked.toString());
});
}
//内部小部件构建
手势检测器(
onTap:()=>\u选择日期(上下文),
儿童:吸收点(
子项:TextFormField(
控制员:_日期,
键盘类型:TextInputType.datetime,
装饰:输入装饰(
hintText:‘出生日期’,
前缀:图标(
图标。拨号板,
颜色:_图标,
),
),
),
),
);
TextField(
控制器:TextEditingController()
..text=reservationProvider.date,
装饰:输入装饰(
图像图标(
AssetImage('images/calendar_today.png'),
颜色:颜色,黑色,
)),
只读:对,
onTap:()异步{
最终日期=等待showDatePicker(
上下文:上下文,
firstDate:DateTime(1960年),
initialDate:DateTime.now(),
lastDate:DateTime(2100));
如果(日期!=null){
打印(日期);
}
},
),
看看下面的回答:。如果这是你的意思,但你不明白,请告诉我用示例来说明答案。如果我想同时使用文本字段来删除日期和从日期选择器中选择日期,我该怎么办?你至少应该在显示代码之前输入一些介绍文本,以便人们知道你提供了什么。然后您应该正确地格式化代码。没有人喜欢读像书中故事那样的代码。