What is the use of FocusManager ?
Answer
Overview
in Flutter is the system-level manager that tracks which widget currently has keyboard focus and provides methods to programmatically control focus behavior — especially for dismissing the keyboard.textFocusManager
Most Common Use — Dismiss Keyboard
dart// Dismiss keyboard when tapping outside a text field GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); // or: FocusScope.of(context).unfocus(); }, child: Scaffold( body: TextField(), ), )
FocusManager Methods
dart// Get the currently focused node final current = FocusManager.instance.primaryFocus; print(current); // FocusNode or null // Unfocus the current focus (hides keyboard) FocusManager.instance.primaryFocus?.unfocus(); // Check if any node is focused bool hasFocus = FocusManager.instance.primaryFocus != null;
FocusNode — Control Individual Field Focus
dartclass LoginScreen extends StatefulWidget { _LoginScreenState createState() => _LoginScreenState(); } class _LoginScreenState extends State<LoginScreen> { final _emailFocus = FocusNode(); final _passwordFocus = FocusNode(); void dispose() { _emailFocus.dispose(); _passwordFocus.dispose(); super.dispose(); } Widget build(BuildContext context) { return Column( children: [ TextField( focusNode: _emailFocus, textInputAction: TextInputAction.next, onSubmitted: (_) { // Move focus to password field on "Next" FocusScope.of(context).requestFocus(_passwordFocus); }, ), TextField( focusNode: _passwordFocus, textInputAction: TextInputAction.done, onSubmitted: (_) { FocusManager.instance.primaryFocus?.unfocus(); // Hide keyboard _login(); }, ), ], ); } }
Auto-dismiss Keyboard on Scroll
dartNotificationListener<ScrollNotification>( onNotification: (_) { FocusManager.instance.primaryFocus?.unfocus(); return false; }, child: ListView(...), )
FocusManager vs FocusScope vs FocusNode
| Class | Purpose |
|---|---|
text | Global singleton — current focus state |
text | Group of focusable nodes (per subtree) |
text | Individual focusable item |
text | Controls Tab order |
Practical Use Cases
| Use Case | Code |
|---|---|
| Dismiss keyboard on tap outside | text |
| Move to next field | text |
| Request focus programmatically | text |
| Listen to focus changes | text |
Tip: Always
yourtextdispose()instances to prevent memory leaks. PairtextFocusNodewithtextFocusManagerwrapping your Scaffold to dismiss the keyboard when tapping empty areas.textGestureDetector