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 le faire avec les API de Flutter?
(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 TextFormField
au lieu de TextField
et utiliser la propriété initialValue
. par exemple
TextFormField(initialValue: "I am smart")
Si vous utilisez TextEditingController, définissez le texte comme indiqué ci-dessous.
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
et si vous n'utilisez pas TextEditingController, vous pouvez directement utiliser initialValue comme ci-dessous
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Pour plus de référence TextEditingController
Si vous souhaitez gérer plusieurs TextInput
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 un TextEditingController
comme ceci:
initialValue(val) {
return TextEditingController(text: val);
}
Ensuite, définissez cette fonction comme contrôleur pour TextInput
et fournissez sa valeur initiale comme suit:
controller: initialValue('Some initial value here....')
Vous pouvez répéter cette opération pour les autres TextInput
s.
en classe intérieure,
final usernameController = TextEditingController(text: 'bhanuka');
Champ de texte,
child: new TextField(
controller: usernameController,
...
)