diff --git a/packages/flutter_hooks/lib/src/focus_node.dart b/packages/flutter_hooks/lib/src/focus_node.dart index 5dfb3e0..ef41915 100644 --- a/packages/flutter_hooks/lib/src/focus_node.dart +++ b/packages/flutter_hooks/lib/src/focus_node.dart @@ -10,6 +10,7 @@ FocusNode useFocusNode({ bool skipTraversal = false, bool canRequestFocus = true, bool descendantsAreFocusable = true, + bool descendantsAreTraversable = true, }) { return use( _FocusNodeHook( @@ -18,6 +19,7 @@ FocusNode useFocusNode({ skipTraversal: skipTraversal, canRequestFocus: canRequestFocus, descendantsAreFocusable: descendantsAreFocusable, + descendantsAreTraversable: descendantsAreTraversable, ), ); } @@ -29,6 +31,7 @@ class _FocusNodeHook extends Hook { required this.skipTraversal, required this.canRequestFocus, required this.descendantsAreFocusable, + required this.descendantsAreTraversable, }); final String? debugLabel; @@ -36,6 +39,7 @@ class _FocusNodeHook extends Hook { final bool skipTraversal; final bool canRequestFocus; final bool descendantsAreFocusable; + final bool descendantsAreTraversable; @override _FocusNodeHookState createState() { @@ -50,6 +54,7 @@ class _FocusNodeHookState extends HookState { skipTraversal: hook.skipTraversal, canRequestFocus: hook.canRequestFocus, descendantsAreFocusable: hook.descendantsAreFocusable, + descendantsAreTraversable: hook.descendantsAreTraversable, ); @override @@ -59,6 +64,7 @@ class _FocusNodeHookState extends HookState { ..skipTraversal = hook.skipTraversal ..canRequestFocus = hook.canRequestFocus ..descendantsAreFocusable = hook.descendantsAreFocusable + ..descendantsAreTraversable = hook.descendantsAreTraversable ..onKeyEvent = hook.onKeyEvent; } diff --git a/packages/flutter_hooks/test/use_focus_node_test.dart b/packages/flutter_hooks/test/use_focus_node_test.dart index 055893e..0942c6b 100644 --- a/packages/flutter_hooks/test/use_focus_node_test.dart +++ b/packages/flutter_hooks/test/use_focus_node_test.dart @@ -76,6 +76,8 @@ void main() { expect(focusNode.skipTraversal, official.skipTraversal); expect(focusNode.canRequestFocus, official.canRequestFocus); expect(focusNode.descendantsAreFocusable, official.descendantsAreFocusable); + expect(focusNode.descendantsAreTraversable, + official.descendantsAreTraversable); }); testWidgets('has all the FocusNode parameters', (tester) async { @@ -91,6 +93,7 @@ void main() { skipTraversal: true, canRequestFocus: false, descendantsAreFocusable: false, + descendantsAreTraversable: false, ); return Container(); }), @@ -101,6 +104,7 @@ void main() { expect(focusNode.skipTraversal, true); expect(focusNode.canRequestFocus, false); expect(focusNode.descendantsAreFocusable, false); + expect(focusNode.descendantsAreTraversable, false); }); testWidgets('handles parameter change', (tester) async { @@ -118,6 +122,7 @@ void main() { skipTraversal: true, canRequestFocus: false, descendantsAreFocusable: false, + descendantsAreTraversable: false, ); return Container(); @@ -140,5 +145,6 @@ void main() { expect(focusNode.skipTraversal, false); expect(focusNode.canRequestFocus, true); expect(focusNode.descendantsAreFocusable, true); + expect(focusNode.descendantsAreTraversable, true); }); }