If you don’t want to go through step by step, you can use below method to save time:
/// Hide the soft keyboard.
void hideKeyboard(BuildContext context) {
FocusScope.of(context).requestFocus(FocusNode());
}
Declare and create new FocusNode
class _DismissKeyboardTutorialScreenState extends State<DismissKeyboardTutorialScreen> {
FocusNode focusNode;
@override
void initState() {
super.initState();
focusNode = FocusNode();
}
// ...
}
“Connect” your TextField with above focusNode
@override
Widget build(BuildContext context) {
// ... Other widgets
TextField(
focusNode: focusNode,
),
// ... Other widgets
}
Create showKeyboard() and dismissKeyboard() methods
void showKeyboard() {
focusNode.requestFocus();
}
void dismissKeyboard() {
focusNode.unfocus();
}
Use those methods
RaisedButton(
onPressed: () {
showKeyboard();
},
child: Text('Show Keyboard'),
),
RaisedButton(
onPressed: () {
dismissKeyboard();
},
child: Text('Dismiss Keyboard'),
),
Don’t forget to dispose the FocusNode
@override
void dispose() {
focusNode.dispose();
super.dispose();
}
Put it all together
import 'package:flutter/material.dart';
void main() => runApp(ShowSnackBarDemo());
class ShowSnackBarDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Coflutter - Dismiss Keyboard',
home: Scaffold(
appBar: AppBar(
title: const Text('Coflutter - Dismiss Keyboard'),
backgroundColor: const Color(0xffae00f0),
),
body: DismissKeyboardTutorialScreen(),
),
);
}
}
class DismissKeyboardTutorialScreen extends StatefulWidget {
@override
_DismissKeyboardTutorialScreenState createState() =>
_DismissKeyboardTutorialScreenState();
}
class _DismissKeyboardTutorialScreenState
extends State<DismissKeyboardTutorialScreen> {
FocusNode focusNode;
@override
void initState() {
super.initState();
focusNode = FocusNode();
focusNode.addListener(() {
print('Listener');
});
}
@override
void dispose() {
focusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: TextField(
autofocus: true,
focusNode: focusNode,
),
),
RaisedButton(
onPressed: () {
showKeyboard();
},
child: Text('Show Keyboard'),
),
RaisedButton(
onPressed: () {
dismissKeyboard();
},
child: Text('Dismiss Keyboard'),
),
],
),
);
}
void showKeyboard() {
focusNode.requestFocus();
}
void dismissKeyboard() {
focusNode.unfocus();
}
}
Oldest comments (0)