How to hide soft input keyboard on flutter after clicking outside TextField/anywhere on screen?
You are doing it in the wrong way, just try this simple method to hide the soft keyboard. you just need to wrap your whole screen in the GestureDetector
method and onTap
method write this code.
FocusScope.of(context).requestFocus(new FocusNode());
Here is the complete example:
new Scaffold(
body: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: new Container(
//rest of your code write here
)
)
Updated (May 2021)
return GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: Scaffold(
appBar: AppBar(
title: Text('Login'),
),
body: Body(),
),
);
This will work even when you touch the AppBar, new
is optional in Dart 2. FocusManager.instance.primaryFocus
will return the node that currently has the primary focus in the widget tree.
Conditional access in Dart with null-safety
Updated
Starting May 2019, FocusNode
now has unfocus
method:
Cancels any outstanding requests for focus.
This method is safe to call regardless of whether this node has ever requested focus.
Use unfocus
if you have declared a FocusNode
for your text fields:
final focusNode = FocusNode();
// ...
focusNode.unfocus();
My original answer suggested detach
method - use it only if you need to get rid of your FocusNode
completely. If you plan to keep it around - use unfocus
instead.
If you have not declared a FocusNode
specifically - use unfocus
for the FocusScope
of your current context:
FocusScope.of(context).unfocus();
See revision history for the original answer.
Wrap whole screen in GestureDetector
as
new Scaffold(
body: new GestureDetector(
onTap: () {
// call this method here to hide soft keyboard
FocusScope.of(context).requestFocus(new FocusNode());
},
child: new Container(
-
-
-
)
)