Risposte:
(Dalla mailing list. Non ho trovato questa risposta.)
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'),
),
],
);
}
}
È possibile utilizzare un TextFormField
anziché TextField
e utilizzare la initialValue
proprietà per esempio
TextFormField(initialValue: "I am smart")
Non è necessario definire una variabile separata nell'ambito del widget, basta farlo in linea:
TextField(
controller: TextEditingController()..text = 'Your initial value',
onChanged: (text) => {},
)
Se stai usando TextEditingController, imposta il testo su di esso, come di seguito
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
e se non stai usando TextEditingController , puoi usare direttamente InitValue come di seguito
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Per ulteriori riferimenti TextEditingController
text
proprietà come da documenti della TextEditingController.text
proprietà: impostando questo notificherà a tutti gli ascoltatori di questo TextEditingController che devono aggiornare (chiama notificationListeners). Per questo motivo, questo valore deve essere impostato solo tra i frame, ad esempio in risposta alle azioni dell'utente, non durante le fasi di costruzione, layout o disegno. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
Se si desidera gestire più messaggi TextInput
come richiesto da @MRT nel commento alla risposta accettata, è possibile creare una funzione che accetta un valore iniziale e restituisce un valore TextEditingController
simile al seguente:
initialValue(val) {
return TextEditingController(text: val);
}
Quindi, imposta questa funzione come controller per TextInput
e fornisci il suo valore iniziale in questo modo:
controller: initialValue('Some initial value here....')
Puoi ripetere questo per gli altri TextInput
.
Questo può essere ottenuto utilizzando TextEditingController
.
Per avere un valore iniziale è possibile aggiungere
TextEditingController _controller = TextEditingController(text: 'initial value');
o
Se stai usando TextFormField
hai una initialValue
proprietà lì. Che sostanzialmente fornisce automaticamente questo initialValue
al controller.
TextEditingController _controller = TextEditingController();
TextFormField(
controller: _controller,
initialValue: 'initial value'
)
Per cancellare il testo puoi usare il
_controller.clear()
metodo.
all'interno della classe,
final usernameController = TextEditingController(text: 'bhanuka');
Campo di testo,
child: new TextField(
controller: usernameController,
...
)
TextEdittingController _controller = new TextEdittingController(text: "your Text");
o
@override
void initState() {
super.initState();
_Controller.text = "Your Text";
}
Se non hai trovato la risposta per questo e per coloro che vengono qui in cerca di una risposta: dai InputDecoration
un'occhiata al suggerimento sul campo.
new TextField(
decoration: new InputDecoration(
hintText:"My Text String."
),
...