Я хотел бы ввести начальное значение в текстовое поле и перерисовать его с пустым значением, чтобы очистить текст. Как лучше всего это сделать с помощью API Flutter?
146
(Из списка рассылки. Я не придумал этого ответа.)
class _FooState extends State<Foo> {
TextEditingController _controller;
@override
void initState() {
super.initState();
_controller = new TextEditingController(text: 'Initial value');
}
@override
Widget build(BuildContext context) {
return new Column(
children: <Widget>[
new TextField(
// The TextField is first built, the controller has some initial text,
// which the TextField shows. As the user edits, the text property of
// the controller is updated.
controller: _controller,
),
new RaisedButton(
onPressed: () {
// You can also use the controller to manipuate what is shown in the
// text field. For example, the clear() method removes all the text
// from the text field.
_controller.clear();
},
child: new Text('CLEAR'),
),
],
);
}
}
Вы можете использовать
TextFormField
вместоTextField
и использоватьinitialValue
свойство. напримеристочник
Вам не нужно определять отдельную переменную в области виджета, просто сделайте это встроенным:
источник
источник
text
свойства в соответствии с документамиTextEditingController.text
свойства - хорошая идея : установка этого параметра уведомит всех слушателей этого TextEditingController, что им необходимо обновить (он вызывает notifyListeners). По этой причине это значение должно устанавливаться только между кадрами, например, в ответ на действия пользователя, а не во время этапов сборки, макета или рисования. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )Я видел много способов сделать это здесь. Однако я думаю, что это немного более эффективно или, по крайней мере, кратко, чем другие ответы.
источник
Если вы хотите обрабатывать несколько
TextInput
s в соответствии с запросом @MRT в комментарии к принятому ответу, вы можете создать функцию, которая принимает начальное значение и возвращаетTextEditingController
следующее:Затем установите эту функцию в качестве контроллера для
TextInput
и укажите ее начальное значение следующим образом:Вы можете повторить это для других
TextInput
s.источник
Этого можно добиться с помощью
TextEditingController
.Чтобы получить начальное значение, вы можете добавить
или
Если вы используете, у
TextFormField
вас там естьinitialValue
недвижимость. Что в основном предоставляет этоinitialValue
контроллеру автоматически.Чтобы очистить текст, вы можете использовать
_controller.clear()
метод.источник
или
источник
внутри класса,
Текстовое поле,
источник
Если вы не нашли ответа на этот вопрос и для тех, кто пришел сюда в поисках ответа:
InputDecoration
ознакомьтесь с полем hintText:источник