Очистить текстовое поле на основе измененного (flutter)

#flutter #dart #textfield

#flutter #dart #текстовое поле

Вопрос:

 TextField(
    inputFormatters: [
     new FilteringTextInputFormatter.allow(
     RegExp('[0-9]')),
    ],
    hintText: 'some text'
    title: '',
    editingController: controllers[31],
    value: somenumber,
    onChange: (value) {
      if (num.parse(value) <= 3000 amp;amp;
        num.parse(value) >= 30) {
        // save some data
      }else{
      controllers[31].clear(),
     },
   ),
  

итак, выше приведено текстовое поле с onchange, прямо сейчас текстовое поле не очищается, если я помещаю вне диапазона, возможно ли очистить текстовое поле на основе onchange?

Ответ №1:

Является TextField() ли используемое вами частью плагина? Свойства выглядят немного странно по сравнению с последней стабильной версией Flutter.

Вот пример, который очищает текст:

 TextEditingController textEditingController = new TextEditingController();

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(),
    body: Container(
      child: TextField(
        inputFormatters: [
          new FilteringTextInputFormatter.allow(RegExp('[0-9]')),
        ],
        decoration: InputDecoration(
          hintText: 'some text',
        ),
        controller: textEditingController,
        onChanged: (value) {
          if (value.length <= 10) {
            // something
          } else {
            textEditingController.clear();
          }
        }
      ),
    ),
  );
}
  

Ответ №2:

Создайте TextEditingController для вашего текстового поля, а затем назначьте его свойству контроллера TextField .

 // create controller
TextEditingController _controller = new TextEditingController();
  
 // assign it to TextField controller property
TextField(
    controller : _controller
    // your other properties
)
  

затем, чтобы очистить текст

 // clear text
_controller.clear();
``
  

Ответ №3:

Вы также можете сделать это :

 TextEditingController textEditingController = new TextEditingController();
Function onchange;
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(),
    body: Container(
      child: TextField(
        inputFormatters: [
          new FilteringTextInputFormatter.allow(RegExp('[0-9]')),
        ],
        decoration: InputDecoration(
          hintText: 'some text',
          suffixIcon: IconButton(
              onPressed: () {
                widget.onchanged('');
                controller.clear();
              },
        ),
        controller: textEditingController,
        onChanged: (value) => onchange(value)

        }
      ),
    ),
  );
}
  

Комментарии:

1. Ответ был бы более полезным, если бы вы могли добавить некоторое объяснение вместе с кодом.

2. метод OnChanged имеет строку параметров, мы передаем ему пустую строку, а затем я очистил текстовую форму с помощью controller.clear()