如何在文本字段的onclick而不是flutter的键盘上显示日期选择器?

时间:2018-08-18 11:06:36

标签: flutter

希望在单击Authorization而不是键盘时显示日期选择器。我曾尝试使用TextFormField,但没有按预期工作。

GestureDetector

3 个答案:

答案 0 :(得分:5)

您可以用TextField包装AbsorbPointer,这样您的小部件树将如下所示:

GestureDetector(
  onTap:()=>showDialog(),
  child:AbsorbPointer(
    child: MyTextField(),
  )
)

答案 1 :(得分:1)

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,
                        ),
                      ),
                    ),
                  ),
                ),

答案 2 :(得分:-1)

TextField(
  controller: TextEditingController()
    ..text = reservationProvider.date,
  decoration: InputDecoration(
      suffixIcon: ImageIcon(
    AssetImage('images/calendar_today.png'),
    color: Colors.black,
  )),
  readOnly: true,
  onTap: () async {
    final date = await showDatePicker(
        context: context,
        firstDate: DateTime(1960),
        initialDate: DateTime.now(),
        lastDate: DateTime(2100));
    if (date != null) {
      print(date);
    }
  },
),