Ich möchte einen Anfangswert für ein Textfeld angeben und es mit einem leeren Wert neu zeichnen, um den Text zu löschen. Was ist der beste Ansatz, um dies mit den APIs von Flutter zu erreichen?
(Von der Mailingliste. Ich habe diese Antwort nicht gefunden.)
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'),
),
],
);
}
}
Sie können anstelle von TextFormField
eine TextField
und die initialValue
-Eigenschaft verwenden. zum Beispiel
TextFormField(initialValue: "I am smart")
Wenn Sie TextEditingController verwenden, legen Sie den Text wie folgt fest
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
wenn Sie keinen TextEditingController verwenden, können Sie initialValue direkt wie folgt verwenden
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Für weitere Informationen TextEditingController
Wenn Sie mehrere TextInput
s behandeln möchten, wie von @MRT im Kommentar zur akzeptierten Antwort verlangt, können Sie eine Funktion erstellen, die einen Anfangswert annimmt und ein TextEditingController
-Objekt wie folgt zurückgibt:
initialValue(val) {
return TextEditingController(text: val);
}
Stellen Sie dann diese Funktion als Controller für TextInput
ein und geben Sie ihren Anfangswert wie folgt an:
controller: initialValue('Some initial value here....')
Sie können dies für die anderen TextInput
s wiederholen.
in der Klasse,
final usernameController = TextEditingController(text: 'bhanuka');
Textfeld,
child: new TextField(
controller: usernameController,
...
)