У меня есть TextEditingController
где, если пользователь нажимает кнопку, он заполняется информацией. Я не могу понять, как изменить текст внутри Textfield
или TextFormField
. Есть ли решение?
Как вы изменяете значение внутри флаттера в текстовом поле?
Ответ 1
Просто измените text
свойство
TextField(
controller: txt,
),
RaisedButton(onPressed: () {
txt.text = "My Stringt";
}),
в то время как txt
является просто TextEditingController
var txt = TextEditingController();
Ответ 2
_mytexteditingcontroller.value = new TextEditingController.fromValue(new TextEditingValue(text: "My String")).value;
Это похоже на работу, если у кого-то есть лучший способ, пожалуйста, не стесняйтесь, дайте мне знать.
Ответ 3
Вы можете использовать контроллер редактирования текста для управления значением внутри текстового поля.
var textController = new TextEditingController();
Теперь создайте новое текстовое поле и установите textController
в качестве контроллера для текстового поля, как показано ниже.
new TextField(controller: textController)
Теперь создайте RaisedButton
любом месте вашего кода и задайте нужный текст в методе onPressed
для RaisedButton
.
new RaisedButton(
onPressed: () {
setState(() {
textController.text = "New text";
});
}
),
Ответ 4
Используя это решение, вы также сможете поместить курсор в конец нового текста.
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: TextField(controller: _controller)),
floatingActionButton: FloatingActionButton(
onPressed: () {
_controller.text = "Hello";
// this changes cursor position
_controller.selection = TextSelection.fromPosition(TextPosition(offset: _controller.text.length));
setState(() {});
},
),
);
}
Ответ 5
Первая вещь
TextEditingController MyController= new TextEditingController();
Затем добавьте его в состояние init или в любое SetState
MyController.value = TextEditingValue(text: "ANY TEXT");
Ответ 6
Проблема с настройкой
_controller.text = "New value";
означает, что курсор будет перемещен в начало (в материале TextField). Использование
_controller.text = "Hello";
_controller.selection = TextSelection.fromPosition(
TextPosition(offset: _controller.text.length),
);
setState(() {});
неэффективен, поскольку он перестраивает виджет больше, чем необходимо (при установке свойства текста и при вызове setState).
-
Я считаю, что лучший способ - это объединить все в одну простую команду:
final _newValue = "New value";
_controller.value = TextEditingValue(
text: _newValue,
selection: TextSelection.fromPosition(
TextPosition(offset: _newValue.length),
),
);
Он работает как для текстовых, так и для текстовых полей Купертино.