Gostaria de fornecer um valor inicial para um campo de texto e redesenhá-lo com um valor vazio para limpar o texto. Qual é a melhor abordagem para fazer isso com as APIs do Flutter?
142
(Na lista de discussão. Não encontrei esta resposta.)
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'),
),
],
);
}
}
Você pode usar um em
TextFormField
vez deTextField
e usar ainitialValue
propriedade por exemplofonte
Você não precisa definir uma variável separada no escopo do widget, apenas faça isso em linha:
fonte
fonte
text
propriedade como por docs deTextEditingController.text
propriedade: Definir este irá notificar todos os ouvintes desta TextEditingController que precisam de atualização (que chama notifyListeners). Por esse motivo, esse valor deve ser definido apenas entre os quadros, por exemplo, em resposta às ações do usuário, não durante as fases de construção, layout ou pintura. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )Eu já vi muitas maneiras de fazer isso aqui. No entanto, acho que isso é um pouco mais eficiente ou pelo menos conciso do que as outras respostas.
fonte
Se você deseja manipular vários
TextInput
s, conforme solicitado por @MRT no comentário da resposta aceita, você pode criar uma função que use um valor inicial e retorneTextEditingController
assim:Em seguida, defina esta função como controlador para
TextInput
e forneça seu valor inicial como este:Você pode repetir isso para os outros
TextInput
s.fonte
Isso pode ser alcançado usando
TextEditingController
.Para ter um valor inicial, você pode adicionar
ou
Se você estiver usando,
TextFormField
você tem umainitialValue
propriedade lá. O que basicamente fornece issoinitialValue
ao controlador automaticamente.Para limpar o texto, você pode usar o
_controller.clear()
métodofonte
dentro da classe,
Campo de texto,
fonte
ou
fonte
Se você não encontrou a resposta para isso e para os que vêm aqui procurando uma resposta:
InputDecoration
Confira a dica do campofonte