Я хотел бы ввести начальное значение в текстовое поле и перерисовать его с пустым значением, чтобы очистить текст. Как лучше всего это сделать с помощью API Flutter?
Как мне указать начальное значение в текстовом поле?
Ответы (10)
Вы можете использовать TextFormField
вместо TextField
и использовать свойство initialValue
. Например
TextFormField(initialValue: "I am smart")
(Из списка рассылки. Я не придумал этого ответа.)
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'),
),
],
);
}
}
Вам не нужно определять отдельную переменную в области виджета, просто сделайте это встроенным:
TextField(
controller: TextEditingController()..text = 'Your initial value',
onChanged: (text) => {},
)
Я видел много способов сделать это здесь. Однако я думаю, что это немного более эффективно или, по крайней мере, кратко, чем другие ответы.
TextField(
controller: TextEditingController(text: "Initial Text here"),
)
Если вы используете TextEditingController, установите для него текст, как показано ниже.
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
и если вы не используете какой-либо TextEditingController, вы можете напрямую использовать initialValue, как показано ниже.
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Для получения дополнительной информации TextEditingController
text
в соответствии с документами свойства TextEditingController.text
- хорошая идея: установка этого значения уведомит всех слушателей этого TextEditingController, что им необходимо обновить (он вызывает notifyListeners). По этой причине это значение следует устанавливать только между кадрами, например. в ответ на действия пользователя, а не на этапах сборки, макета или рисования. (api.flutter.dev/flutter/widgets/TextEditingController/text.html а>)
- person Kirill Karmazin; 22.08.2019
Этого можно добиться с помощью TextEditingController
.
Чтобы получить начальное значение, вы можете добавить
TextEditingController _controller = TextEditingController(text: 'initial value');
or
Если вы используете TextFormField
, у вас есть свойство initialValue
. Что в основном предоставляет это initialValue
виджету автоматически.
TextFormField(
initialValue: 'initial value'
)
Чтобы очистить текст, вы можете использовать метод _controller.clear()
.
controller
и initialValue
оба ненулевых значения для TextFormField
- person Slick Slime; 28.01.2021
Если вы хотите обрабатывать несколько TextInput
, как это было задано @MRT в комментарии к принятому ответу, вы можете создать функцию, которая принимает начальное значение и возвращает TextEditingController
следующим образом:
initialValue(val) {
return TextEditingController(text: val);
}
Затем установите эту функцию в качестве контроллера для TextInput
и укажите ее начальное значение следующим образом:
controller: initialValue('Some initial value here....')
Вы можете повторить это для других TextInput
.
внутри класса
final usernameController = TextEditingController(text: 'bhanuka');
TextField,
child: new TextField(
controller: usernameController,
...
)
Вы можете делать все вышеперечисленное, но если вы хотите, чтобы API отображал ваши данные при загрузке, он отображается как страница профиля. так вот код:
TextEditingController _nameController = TextEditingController(); // initialize the controller
// when API gets the data, do this:
_nameController.text = response.data.fullName; or _nameController.text = "Apoorv Pandey"
Надеюсь, это все проясняет. Удачного кодирования!
Простой и эффективный способ
Назначьте контроллер своему TextFormField
или TextField
, и в initState
вы можете инициализировать его начальным значением, как это
_controller = TextEditingController(text: 'Your initial value');