Estoy recopilando la entrada del usuario con un TextFormField
y cuando el usuario presiona un para FloatingActionButton
indicar que ha terminado, quiero cerrar el teclado en pantalla.
¿Cómo hago para que el teclado desaparezca automáticamente?
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
MyHomePageState createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
TextEditingController _controller = new TextEditingController();
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.send),
onPressed: () {
setState(() {
// send message
// dismiss on screen keyboard here
_controller.clear();
});
},
),
body: new Container(
alignment: FractionalOffset.center,
padding: new EdgeInsets.all(20.0),
child: new TextFormField(
controller: _controller,
decoration: new InputDecoration(labelText: 'Example Text'),
),
),
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
void main() {
runApp(new MyApp());
}
Respuestas:
A partir de Flutter v1.7.8 + hotfix.2, el camino a seguir es:
Comente sobre relaciones públicas sobre eso:
-> NO lo use
̶r̶e̶q̶u̶e̶s̶t̶F̶o̶c̶u̶s̶(̶F̶o̶c̶u̶s̶N̶o̶d̶e̶(̶)̶
más.fuente
TextField
sy otros widgets de edición). No sé por qué, pero a vecesunfocus
no tiene ningún efecto. Reemplazarlo con la solución aceptada (sin otros cambios) soluciona el problema. Tal vez esté relacionado con la ubicación desde la queunfocus
se llama. Necesito llamarlo, por ejemplo, desdeCheckBoxListTile.onChanged
para descartar el teclado cuando el usuario interactúa con un widget de casilla de verificación y desde otras ubicaciones similares. No recuerdo la ubicación exacta del problema.Nota: esta respuesta está desactualizada. Vea la respuesta para las versiones más recientes de Flutter .
Puede descartar el teclado quitando el foco del
TextFormField
y dándolo a un no utilizadoFocusNode
:fuente
onChanged:
o en la acción de su botón personalizado?FocusScope.of(context).unfocus()
La solución con FocusScope no me funciona. Encontré otro:
Resolvió mi problema.
fuente
build
método, por ejemplo.Para Flutter 1.17.3 (canal estable a junio de 2020), use
fuente
Ninguna de las soluciones anteriores no me funciona.
Flutter sugiere esto: coloque su widget dentro del nuevo GestureDetector () en el que el toque ocultará el teclado y onTap use FocusScope.of (contexto) .requestFocus (nuevo FocusNode ())
fuente
El siguiente código me ayudó a ocultar el teclado
fuente
La implementación de ejemplo de .unfocus () para ocultar automáticamente el teclado al desplazarse por una lista
puedes encontrar en
https://github.com/flutter/flutter/issues/36869#issuecomment-518118441
Gracias a szotp
fuente
prueba esto en el gesto del grifo
fuente
Como en Flutter todo es un widget, decidí envolver el
SystemChannels.textInput.invokeMethod('TextInput.hide');
y elFocusScope.of(context).requestFocus(FocusNode());
enfoque en un módulo de utilidad corto con un widget y un mixin en él.Con el widget, puede envolver cualquier widget (muy conveniente cuando se usa un buen soporte de IDE) con el
KeyboardHider
widget:Con el mixin, puede activar la ocultación del teclado de cualquier estado o widget en cualquier interacción:
Simplemente cree un
keyboard_hider.dart
archivo y el widget y el mixin estarán listos para usar:fuente
Puedes usar el
unfocus()
método de laFocusNode
clase.fuente
unfocus
método. Si no desea enviar spam a su aplicación, puede utilizar una forma diferente, como elTextFormField
evento de cambio o un patrón reactivo, depende de la arquitectura de su aplicación.Parece diferentes enfoques para diferentes versiones. Estoy usando Flutter v1.17.1 y lo siguiente me funciona.
fuente
fuente
intente usar un controlador de edición de texto. al principio,
y en el evento de prensa,
esto descartará el teclado.
fuente