отображать выбранную дату в поле формы для флаттера

Я пытаюсь понять, как я могу отобразить выбранную дату обратно в поле формы для Flutter. Если я просто использую текстовый элемент, он отлично работает

      TextFormField(
                          onTap: _selectDate,
                          enabled: true,
                          initialValue: DateFormat("E, d MMM yyyy")
                              .format(_date)
                              .toString(),
                          readOnly: true,
                          decoration: InputDecoration(labelText: 'Date'),
                        ),
                        SizedBox(height: 8),
                        Text(DateFormat("E, d MMM yyyy")
                            .format(_date)
                            .toString()),

void _selectDate() async {
    final DateTime newDate = await showDatePicker(
      context: context,
      initialDate: _date,
      firstDate: DateTime.now(),
      lastDate: DateTime.now().add(Duration(days: 90)),
      helpText: 'Select date for task',
    );
    if (newDate != null) {
      setState(() {
        _date = newDate;
      });
    }
  }

1 ответ

Решение

Попробуйте создать TextEditingController и назначить контроллер для TextFormField, а затем установите для controller.text значение, которое вы хотите присвоить в setState. См. Пример кода ниже для справки.

      TextEditingController _dateController = TextEditingController();

TextFormField(
 controller: _dateController,
                          onTap: _selectDate,
                          enabled: true,
                          initialValue: DateFormat("E, d MMM yyyy")
                              .format(_date)
                              .toString(),
                          readOnly: true,
                          decoration: InputDecoration(labelText: 'Date'),
                        ),
                        SizedBox(height: 8),
                        Text(DateFormat("E, d MMM yyyy")
                            .format(_date)
                            .toString()),

void _selectDate() async {
    final DateTime newDate = await showDatePicker(
      context: context,
      initialDate: _date,
      firstDate: DateTime.now(),
      lastDate: DateTime.now().add(Duration(days: 90)),
      helpText: 'Select date for task',
    );
    if (newDate != null) {
      setState(() {
        _date = newDate;
_dateController.text = _date.toString();
      });
    }
  }
Другие вопросы по тегам