Flutter - Дата отображения текстового поля после выбранной даты - PullRequest
0 голосов
/ 09 июля 2020

Я в основном пытаюсь создать экран регистрации для своего приложения. Я уже включил все остальные TextFormField для других данных. Однако теперь я застрял в разделе ввода даты, мне удалось создать TextFormField, завернутый в GestureDetector, где он откроет средство выбора даты для выбора даты после нажатия TextFormField. Моя проблема в том, что я хочу установить значение даты TextFormField с датой, выбранной в средстве выбора даты, я не знаю, почему с кодом, который у меня есть, он очень непоследователен, иногда он отображает дату и в других случаях он не обновляется и продолжает показывать hintText, а также, поскольку при нажатии на поле появляется окно выбора даты, как я могу отключить отображение клавиатуры при фокусировании на поле даты.

class DateState extends StatefulWidget {
  const DateState({
    Key key,
  }) : super(key: key);

  @override
  _DateState createState() => _DateState();
}

class _DateState extends State<DateState> {
  DateTime selectedDate = DateTime.now();

  Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: selectedDate,
        firstDate: DateTime(1950),
        lastDate: DateTime.now());
    if (picked != null && picked != selectedDate)
      setState(() {
        selectedDate = picked;
      });
  }

  @override
  Widget build(BuildContext context) {
    var dateValue = TextEditingController();
    return DateFieldContainer(
      child: GestureDetector(
        child: TextFormField(
          controller: dateValue,
          onTap: () {
            _selectDate(context);
            dateValue.text = "${selectedDate.toLocal()}".split(' ')[0];
          },
          decoration: InputDecoration(
            hintText: "Select Date",
            focusedBorder: UnderlineInputBorder(
              borderSide: BorderSide(color: PrimaryColor),
            ),
          ),
        ),
      ),
    );
  }
}

1 Ответ

0 голосов
/ 09 июля 2020

Просто замените _selectDate() приведенным ниже кодом.

void _selectDate(){
    showDatePicker(
      context: context,
      initialDate: selectedDate,
      firstDate: DateTime(1950),
      lastDate: DateTime.now(),
    ).then((pickedDate) {
      if (pickedDate == null) {
        return;
      }

      setState(() {
        selectedDate = pickedDate;
        dateValue.text = "${selectedDate.toLocal()}".split(' ')[0];
      });
    });
  }

Замените реализацию onTap() приведенным ниже кодом

onTap: () {
            _selectDate();
          }

Keep var dateValue = TextEditingController () ; вне метода build ().

...