Ich möchte einem Textfeld einen Anfangswert geben und ihn 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 tun?
142
(Aus 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 ein
TextFormField
anstelle vonTextField
und dieinitialValue
Eigenschaft verwenden. beispielsweisequelle
Sie müssen keine separate Variable im Widget-Bereich definieren, sondern nur inline:
quelle
quelle
text
Eigenschaft gemäß den Dokumenten derTextEditingController.text
Eigenschaft festzulegen: Wenn Sie dies festlegen, werden alle Listener dieses TextEditingControllers darüber informiert, dass sie aktualisiert werden müssen (es werden notifyListeners aufgerufen). Aus diesem Grund sollte dieser Wert nur zwischen Frames festgelegt werden, z. B. als Reaktion auf Benutzeraktionen, nicht während der Erstellungs-, Layout- oder Malphase. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )Ich habe hier viele Möglichkeiten gesehen, dies zu tun. Ich denke jedoch, dass dies etwas effizienter oder zumindest prägnanter ist als die anderen Antworten.
quelle
Wenn Sie mehrere
TextInput
s verarbeiten möchten, wie von @MRT im Kommentar zur akzeptierten Antwort gefordert, können Sie eine Funktion erstellen, die einen Anfangswert annimmt und Folgendes zurückgibtTextEditingController
:Stellen Sie dann diese Funktion als Regler für ein
TextInput
und geben Sie dort ihren Anfangswert wie folgt ein:Sie können dies für die anderen
TextInput
s wiederholen .quelle
innerhalb der Klasse,
Textfeld,
quelle
oder
quelle
Dies kann erreicht werden mit
TextEditingController
.Um einen Anfangswert zu haben, können Sie hinzufügen
oder
Wenn Sie verwenden
TextFormField
, haben Sie dort eineinitialValue
Eigenschaft. Was dies im GrundeinitialValue
automatisch an die Steuerung liefert .Um den Text zu löschen, können Sie die
_controller.clear()
Methode verwenden.quelle
Wenn Sie die Antwort darauf und für diejenigen, die hierher kommen und nach einer Antwort suchen, nicht gefunden haben:
InputDecoration
Überprüfen Sie den Hinweis des FeldesText:quelle