Как вы изменяете значение внутри флаттера в текстовом поле?

У меня есть 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),
      ),
    );

Он работает как для текстовых, так и для текстовых полей Купертино.