Ich sammle Benutzereingaben mit a TextFormField
und wenn der Benutzer eine drückt FloatingActionButton
, um anzuzeigen, dass sie fertig sind, möchte ich die Bildschirmtastatur schließen.
Wie kann ich die Tastatur automatisch ausschalten lassen?
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());
}
Antworten:
Ab Flutter v1.7.8 + hotfix.2 ist der richtige Weg:
Kommentar zu PR dazu:
-> NICHT verwenden
̶r̶e̶q̶u̶e̶s̶t̶F̶o̶c̶u̶s̶(̶F̶o̶c̶u̶s̶N̶o̶d̶e̶(̶)̶
mehr.quelle
TextField
s und anderen Bearbeitungs-Widgets). Ich weiß nicht warum,unfocus
hat aber manchmal keine Wirkung. Das Ersetzen durch die akzeptierte Lösung (keine weiteren Änderungen) behebt das Problem. Vielleicht hängt es mit dem Ort zusammen, von dem ausunfocus
angerufen wird. Ich muss es z. B. von aufrufenCheckBoxListTile.onChanged
, um die Tastatur zu schließen, wenn der Benutzer mit einem Kontrollkästchen-Widget interagiert, und von anderen ähnlichen Orten aus. Ich erinnere mich nicht an den genauen Ort des Problems.Hinweis: Diese Antwort ist veraltet. Siehe die Antwort für neuere Versionen von Flutter .
Sie können die Tastatur schließen, indem Sie den Fokus der Tastatur entfernen
TextFormField
und sie einer nicht verwendeten Tastatur gebenFocusNode
:quelle
onChanged:
oder in der Aktion Ihrer benutzerdefinierten Schaltfläche?FocusScope.of(context).unfocus()
Die Lösung mit FocusScope funktioniert bei mir nicht. Ich habe einen anderen gefunden:
Es hat mein Problem gelöst.
quelle
build
zum Beispiel in die Methode ein.Verwenden Sie für Flutter 1.17.3 (stabiler Kanal ab Juni 2020)
quelle
Keine der oben genannten Lösungen funktioniert bei mir nicht.
Flutter schlägt dies vor - Legen Sie Ihr Widget in einen neuen GestureDetector (), auf dem durch Tippen die Tastatur ausgeblendet wird, und onTap verwenden Sie FocusScope.of (Kontext) .requestFocus (neuer FocusNode ()).
quelle
Der folgende Code hat mir geholfen, die Tastatur auszublenden
quelle
Die Beispielimplementierung von .unfocus () zum automatischen Ausblenden der Tastatur beim Scrollen einer Liste
finden Sie unter
https://github.com/flutter/flutter/issues/36869#issuecomment-518118441
Danke an szotp
quelle
Versuchen Sie dies mit einer Tippgeste
quelle
Da in Flutter alles ein Widget ist, habe ich beschlossen, das
SystemChannels.textInput.invokeMethod('TextInput.hide');
und das zu verpackenFocusScope.of(context).requestFocus(FocusNode());
Ansatz in ein kurzes Dienstprogrammmodul mit einem Widget und einem Mixin zu packen.Mit dem Widget können Sie jedes Widget (sehr praktisch bei Verwendung einer guten IDE-Unterstützung) mit dem
KeyboardHider
Widget umschließen:Mit dem Mixin können Sie auslösen, dass die Tastatur bei jeder Interaktion vor einem beliebigen Status oder Widget versteckt wird:
Erstellen Sie einfach eine
keyboard_hider.dart
Datei und das Widget und das Mixin können verwendet werden:quelle
Sie können eine
unfocus()
Methode aus derFocusNode
Klasse verwenden.quelle
unfocus
Methode aufzurufen . Wenn Sie dies nicht in Ihrer App als Spam versenden möchten, können Sie eine andere Methode verwenden, z. B. dasTextFormField
Änderungsereignis oder ein reaktives Muster. Dies hängt von der Architektur Ihrer App ab.Sieht nach unterschiedlichen Ansätzen für unterschiedliche Versionen aus. Ich verwende Flutter v1.17.1 und das Folgende funktioniert für mich.
quelle
quelle
Versuchen Sie es mit einem Textbearbeitungs-Controller. am Anfang,
und in der On-Press-Veranstaltung,
Dadurch wird das Keybord geschlossen.
quelle