Réponses:
(À 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 de TextField
et utiliser la initialValue
propriété. par exemple
TextFormField(initialValue: "I am smart")
Vous n'avez pas besoin de définir une variable distincte dans la portée du widget, faites-le simplement en ligne:
TextField(
controller: TextEditingController()..text = 'Your initial value',
onChanged: (text) => {},
)
Si vous utilisez TextEditingController, définissez-y le texte, comme 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 aucun TextEditingController, vous pouvez utiliser directement initialValue comme ci-dessous
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Pour plus de références TextEditingController
text
propriété selon la documentation de la TextEditingController.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 )
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 un TextEditingController
comme ceci:
initialValue(val) {
return TextEditingController(text: val);
}
Ensuite, définissez cette fonction comme contrôleur pour le TextInput
et indiquez sa valeur initiale comme ceci:
controller: initialValue('Some initial value here....')
Vous pouvez répéter ceci pour les autres TextInput
s.
Ceci peut être réalisé en utilisant TextEditingController
.
Pour avoir une valeur initiale, vous pouvez ajouter
TextEditingController _controller = TextEditingController(text: 'initial value');
ou
Si vous utilisez, TextFormField
vous avez une initialValue
propriété là-bas. Ce qui fournit essentiellement cela initialValue
au contrôleur automatiquement.
TextEditingController _controller = TextEditingController();
TextFormField(
controller: _controller,
initialValue: 'initial value'
)
Pour effacer le texte, vous pouvez utiliser la
_controller.clear()
méthode.
en classe,
final usernameController = TextEditingController(text: 'bhanuka');
Champ de texte,
child: new TextField(
controller: usernameController,
...
)
TextEdittingController _controller = new TextEdittingController(text: "your Text");
ou
@override
void initState() {
super.initState();
_Controller.text = "Your Text";
}
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:
new TextField(
decoration: new InputDecoration(
hintText:"My Text String."
),
...