Je recueille les commentaires des utilisateurs avec un TextFormField
et lorsque l'utilisateur appuie sur a pour FloatingActionButton
indiquer qu'il a terminé, je souhaite fermer le clavier à l'écran.
Comment faire disparaître automatiquement le clavier?
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());
}
Réponses:
À partir de Flutter v1.7.8 + hotfix.2, le chemin à parcourir est:
Commentez les relations publiques à ce sujet:
-> NE PAS utiliser
̶r̶e̶q̶u̶e̶s̶t̶F̶o̶c̶u̶s̶(̶F̶o̶c̶u̶s̶N̶o̶d̶e̶(̶)̶
plus.la source
TextField
s et autres widgets d'édition). Je ne sais pas pourquoi maisunfocus
n'a parfois aucun effet. Le remplacer par la solution acceptée (aucune autre modification) résout le problème. C'est peut-être lié à l'endroit d'oùunfocus
est appelé. Je dois l'appeler par exemple deCheckBoxListTile.onChanged
pour ignorer le clavier lorsque l'utilisateur interagit avec un widget de case à cocher, et à partir d'autres emplacements similaires. Je ne me souviens pas de l'emplacement exact du problème.Remarque: cette réponse est obsolète. Voir la réponse pour les nouvelles versions de Flutter .
Vous pouvez ignorer le clavier en supprimant le focus du
TextFormField
et en le donnant à un utilisateur non utiliséFocusNode
:la source
onChanged:
ou dans l'action de votre bouton personnalisé?FocusScope.of(context).unfocus()
La solution avec FocusScope ne fonctionne pas pour moi. J'en ai trouvé un autre:
Cela a résolu mon problème.
la source
build
méthode par exemple.Pour Flutter 1.17.3 (canal stable à partir de juin 2020), utilisez
la source
Aucune des solutions ci-dessus ne fonctionne pour moi.
Flutter suggère ceci - Placez votre widget dans le nouveau GestureDetector () sur lequel tap masquera le clavier et onTap utilisera FocusScope.of (context) .requestFocus (new FocusNode ())
la source
Le code suivant m'a aidé à masquer le clavier
la source
L'exemple d'implémentation de .unfocus () pour masquer automatiquement le clavier lors du défilement d'une liste
vous pouvez trouver à
https://github.com/flutter/flutter/issues/36869#issuecomment-518118441
Merci à szotp
la source
essayez ceci sur le geste du robinet
la source
Comme dans Flutter, tout est un widget, j'ai décidé d'envelopper l' approche
SystemChannels.textInput.invokeMethod('TextInput.hide');
et l'FocusScope.of(context).requestFocus(FocusNode());
approche dans un court module utilitaire avec un widget et un mixin dedans.Avec le widget, vous pouvez envelopper n'importe quel widget (très pratique lorsque vous utilisez un bon support IDE) avec le
KeyboardHider
widget:Avec le mixin, vous pouvez déclencher le masquage du clavier de n'importe quel état ou widget lors de toute interaction:
Créez simplement un
keyboard_hider.dart
fichier et le widget et le mixin sont prêts à être utilisés:la source
Vous pouvez utiliser la
unfocus()
méthode de laFocusNode
classe.la source
unfocus
méthode. Si vous ne voulez pas spammer cela sur votre application, vous pouvez utiliser une méthode différente, comme l'TextFormField
événement de changement ou un modèle réactif, cela dépend de l'architecture de votre application.On dirait différentes approches pour différentes versions. J'utilise Flutter v1.17.1 et ce qui suit fonctionne pour moi.
la source
la source
essayez d'utiliser un contrôleur d'édition de texte. au début,
et dans l'événement on presse,
cela supprimera le clavier.
la source