3.3 KiB
3.3 KiB
| name | description |
|---|---|
| features-focus | Flutter focus management - FocusNode, FocusScope, focus traversal, and keyboard navigation |
Focus Management
Flutter provides comprehensive focus management for keyboard navigation and accessibility.
FocusNode
Manage focus for widgets.
class FocusExample extends StatefulWidget {
const FocusExample({super.key});
@override
State<FocusExample> createState() => _FocusExampleState();
}
class _FocusExampleState extends State<FocusExample> {
final _focusNode = FocusNode();
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
focusNode: _focusNode,
decoration: const InputDecoration(labelText: 'Input'),
);
}
}
Request Focus
Programmatically request focus.
final _focusNode = FocusNode();
@override
Widget build(BuildContext context) {
return Column(
children: [
TextField(focusNode: _focusNode),
ElevatedButton(
onPressed: () {
_focusNode.requestFocus();
},
child: const Text('Focus Input'),
),
],
);
}
Unfocus
Remove focus from current widget.
// Unfocus current focus
FocusScope.of(context).unfocus();
// Or using FocusNode
_focusNode.unfocus();
FocusScope
Group focusable widgets.
FocusScope(
child: Column(
children: [
TextField(),
TextField(),
ElevatedButton(
onPressed: () {
FocusScope.of(context).unfocus();
},
child: const Text('Unfocus All'),
),
],
),
)
Focus Traversal
Navigate between focusable widgets.
FocusTraversalGroup(
child: Column(
children: [
TextField(),
TextField(),
TextField(),
ElevatedButton(
onPressed: () {
FocusTraversalGroup.of(context).nextFocus();
},
child: const Text('Next'),
),
],
),
)
Focus Traversal Order
Control focus order.
FocusTraversalOrder(
order: NumericFocusOrder(1.0),
child: TextField(),
)
FocusTraversalOrder(
order: NumericFocusOrder(2.0),
child: TextField(),
)
Focus Listener
Listen to focus changes.
final _focusNode = FocusNode();
@override
void initState() {
super.initState();
_focusNode.addListener(() {
if (_focusNode.hasFocus) {
print('Focused');
} else {
print('Unfocused');
}
});
}
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
Keyboard Actions
Handle keyboard actions.
TextField(
textInputAction: TextInputAction.next,
onSubmitted: (value) {
// Move to next field
FocusScope.of(context).nextFocus();
},
)
Key Points
- Use
FocusNodeto manage focus for widgets - Call
requestFocus()to focus a widget - Call
unfocus()to remove focus - Use
FocusScopeto group focusable widgets - Use
FocusTraversalGroupfor keyboard navigation - Use
FocusTraversalOrderto control focus order - Always dispose
FocusNodeto prevent leaks - Listen to focus changes with
addListener() - Use
FocusScope.of(context).unfocus()to dismiss keyboard