Je voudrais fournir une valeur initiale à un champ de texte et le redessiner avec une valeur vide pour effacer le texte. Quelle est la meilleure approche pour y parvenir avec les API de Flutter?
144
(À partir de la liste de diffusion. Je n'ai pas trouvé cette réponse.)
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'),
),
],
);
}
}
Vous pouvez utiliser un
TextFormField
au lieu deTextField
et utiliser lainitialValue
propriété. par exemplela source
Vous n'avez pas besoin de définir une variable distincte dans la portée du widget, faites-le simplement en ligne:
la source
la source
text
propriété selon la documentation de laTextEditingController.text
propriété: définir cela informera tous les écouteurs de ce TextEditingController qu'ils doivent mettre à jour (cela appelle notifyListeners). Pour cette raison, cette valeur ne doit être définie qu'entre les cadres, par exemple en réponse aux actions de l'utilisateur, et non pendant les phases de construction, de mise en page ou de peinture. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )J'ai vu de nombreuses façons de le faire ici. Cependant, je pense que c'est un peu plus efficace ou du moins concis que les autres réponses.
la source
Si vous souhaitez gérer plusieurs
TextInput
s comme demandé par @MRT dans le commentaire de la réponse acceptée, vous pouvez créer une fonction qui prend une valeur initiale et renvoie unTextEditingController
comme ceci:Ensuite, définissez cette fonction comme contrôleur pour le
TextInput
et indiquez sa valeur initiale comme ceci:Vous pouvez répéter ceci pour les autres
TextInput
s.la source
Ceci peut être réalisé en utilisant
TextEditingController
.Pour avoir une valeur initiale, vous pouvez ajouter
ou
Si vous utilisez,
TextFormField
vous avez uneinitialValue
propriété là-bas. Ce qui fournit essentiellement celainitialValue
au contrôleur automatiquement.Pour effacer le texte, vous pouvez utiliser la
_controller.clear()
méthode.la source
en classe,
Champ de texte,
la source
ou
la source
Si vous n'avez pas trouvé la réponse pour cela et pour ceux qui viennent ici à la recherche d'une réponse:
InputDecoration
Consultez l'indice du champTexte:la source