Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在flatter中,如何在文本字段的onclick上而不是键盘上显示日期选择器?_Flutter - Fatal编程技术网

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){
打印(日期);
}
},
),

看看下面的回答:。如果这是你的意思,但你不明白,请告诉我用示例来说明答案。如果我想同时使用文本字段来删除日期和从日期选择器中选择日期,我该怎么办?你至少应该在显示代码之前输入一些介绍文本,以便人们知道你提供了什么。然后您应该正确地格式化代码。没有人喜欢读像书中故事那样的代码。