Как указать исходное значение в текстовое поле?

Я хотел бы указать начальное значение в текстовое поле и перерисовать его с пустым значением, чтобы очистить текст. Какой лучший подход для использования с API-интерфейсами Flutter?

Ответ 1

(Из списка рассылки. Я не придумал этот ответ.)

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'),
        ),
      ],
    );
  }
}

Ответ 2

Вы можете использовать TextFormField вместо TextField и использовать свойство initialValue. например

TextFormField(initialValue: "I am smart")

Ответ 3

Если вы используете 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

Ответ 4

Если вы хотите обрабатывать несколько TextInput в соответствии с запросом @MRT в комментарии к принятому ответу, вы можете создать функцию, которая принимает начальное значение и возвращает TextEditingController например:

initialValue(val) {
  return TextEditingController(text: val);
}

Затем установите эту функцию в качестве контроллера для TextInput и TextInput его начальное значение следующим образом:

controller: initialValue('Some initial value here....')

Вы можете повторить это для других TextInput s.

Ответ 5

внутри класса,

  final usernameController = TextEditingController(text: 'bhanuka');

Текстовое поле,

   child: new TextField(
        controller: usernameController,
    ...
)

Ответ 6

Вам не нужно определять отдельную переменную в области виджета, просто сделайте это встроенным:

TextField(
  controller: TextEditingController()..text = 'Your initial value',
  onChanged: (text) => {},
)

Ответ 7

Если вы не нашли ответ для этого и для тех, кто пришел сюда, чтобы найти ответ: Оформить поле InputDecoration hintText:

new TextField(
  decoration: new InputDecoration(
    hintText:"My Text String."
  ),
...