Flutter TextEditingController不清除readOnly TextFormField中的文本

e4eetjau  于 2023-03-31  发布在  Flutter
关注(0)|答案(1)|浏览(172)

我是新来的flutter.我试图使一个窗体的取消按钮.我可以清除所有的TextFormField成功除了这个只读TextFormField其值是由TextEditingController设置.
这是TextFormField。我可以将TextFormField()的值设置为用户成功选择的日期。

final _start_time_controller = TextEditingController();
final _finish_time_controller = TextEditingController();

Flexible(
    child: TextFormField(
        onTap: () async {
            final selectedDate = await _selectDateTime(context);
            if(selectedDate == null) return;
            final selectedTime = await _selectTime(context);
            if(selectedTime == null) return;
            setState(() {
                _start_time = DateTime(selectedDate.year,selectedDate.month,selectedDate.day,selectedTime.hour,selectedTime.minute);
                _start_time_controller.text = _start_time.toString();
            });
        },
    decoration: InputDecoration(
        labelText: 'Start Time',
            border: OutlineInputBorder(borderRadius: BorderRadius.circular(10.0))
    ),
    controller: _start_time_controller,
    readOnly: true,
    validator: (value) => value.isEmpty ? 'Start Time can\'t be empty' : null,
    ),                         
),

这是取消按钮。

Expanded(
    child: RoundedButton(
        text: 'Cancel',
        buttonColor: Colors.grey,
        textColor: Colors.black,
        press: cancel,
    ),
) ,

这是取消功能。

void cancel(){
    _start_time = null;
    _finish_time = null;
    _start_time_controller.clear();
    _finish_time_controller.clear();
    formKey.currentState.reset();
}

我尝试将两个TextEditingController.clear()调用 Package 在setstate()函数中,但是它不起作用。

vulvrdjw

vulvrdjw1#

如果TextEditingController.clear()没有清除TextFormField上的值,则很可能是在重新生成屏幕时设置了该值。解决此问题的方法是在TextEditingController上设置新的文本值。

setState(() {
  _start_time_controller.text = '';
  _finish_time_controller.text = '';
});

相关问题