Me gustaría proporcionar un valor inicial a un campo de texto y volver a dibujarlo con un valor vacío para borrar el texto. ¿Cuál es el mejor enfoque para hacer eso con las API de Flutter?
142
(De la lista de correo. No se me ocurrió esta respuesta).
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'),
),
],
);
}
}
Puede usar un en
TextFormField
lugar deTextField
, y usar lainitialValue
propiedad. por ejemplofuente
No tiene que definir una variable separada en el alcance del widget, solo hágalo en línea:
fuente
fuente
text
propiedad según los documentos de laTextEditingController.text
propiedad: al configurar esto, se notificará a todos los oyentes de este TextEditingController que necesitan actualizar (llama a notifyListeners). Por esta razón, este valor solo debe establecerse entre cuadros, por ejemplo, en respuesta a las acciones del usuario, no durante las fases de construcción, diseño o pintura. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )He visto muchas formas de hacer esto aquí. Sin embargo, creo que esto es un poco más eficiente o al menos conciso que las otras respuestas.
fuente
Si desea manejar múltiples
TextInput
correos electrónicos según lo solicitado por @MRT en el comentario a la respuesta aceptada, puede crear una función que tome un valor inicial y devuelva un aspectoTextEditingController
como este:Luego, configure esta función como el controlador para el
TextInput
y proporcione su valor inicial allí de esta manera:Puede repetir esto para el otro
TextInput
s.fuente
Esto se puede lograr usando
TextEditingController
.Para tener un valor inicial puedes agregar
o
Si está utilizando
TextFormField
, tiene unainitialValue
propiedad allí. Lo que básicamente proporciona estoinitialValue
al controlador automáticamente.Para borrar el texto puedes usar el
_controller.clear()
método.fuente
dentro de clase,
Campo de texto,
fuente
o
fuente
Si no ha encontrado la respuesta para esto y para aquellos que vienen aquí buscando una respuesta:
InputDecoration
Revise la pista del campo Texto:fuente