Unverified Commit 08e61631 authored by Greg Spencer's avatar Greg Spencer Committed by GitHub

Allow Navigator to inherit traversal policy from parent. (#110818)

parent 8f9a5195
...@@ -5235,6 +5235,7 @@ class NavigatorState extends State<Navigator> with TickerProviderStateMixin, Res ...@@ -5235,6 +5235,7 @@ class NavigatorState extends State<Navigator> with TickerProviderStateMixin, Res
child: AbsorbPointer( child: AbsorbPointer(
absorbing: false, // it's mutated directly by _cancelActivePointers above absorbing: false, // it's mutated directly by _cancelActivePointers above
child: FocusTraversalGroup( child: FocusTraversalGroup(
policy: FocusTraversalGroup.maybeOf(context),
child: Focus( child: Focus(
focusNode: focusNode, focusNode: focusNode,
autofocus: true, autofocus: true,
......
...@@ -3775,8 +3775,7 @@ void main() { ...@@ -3775,8 +3775,7 @@ void main() {
expect(focusNode.hasFocus, true); expect(focusNode.hasFocus, true);
}); });
testWidgets('Navigator does not request focus if requestFocus is false', testWidgets('Navigator does not request focus if requestFocus is false', (WidgetTester tester) async {
(WidgetTester tester) async {
final GlobalKey navigatorKey = GlobalKey(); final GlobalKey navigatorKey = GlobalKey();
final GlobalKey innerKey = GlobalKey(); final GlobalKey innerKey = GlobalKey();
final Map<String, Widget> routes = <String, Widget>{ final Map<String, Widget> routes = <String, Widget>{
...@@ -3873,6 +3872,49 @@ void main() { ...@@ -3873,6 +3872,49 @@ void main() {
await tester.pumpWidget(Container(child: build(key))); await tester.pumpWidget(Container(child: build(key)));
observer._checkInvocations(<Symbol>[#navigator, #navigator]); observer._checkInvocations(<Symbol>[#navigator, #navigator]);
}); });
testWidgets("Navigator doesn't override FocusTraversalPolicy of ancestors", (WidgetTester tester) async {
FocusTraversalPolicy? policy;
await tester.pumpWidget(
TestDependencies(
child: FocusTraversalGroup(
policy: WidgetOrderTraversalPolicy(),
child: Navigator(
onGenerateRoute: (RouteSettings settings) {
return PageRouteBuilder<void>(
settings: settings,
pageBuilder: (BuildContext context, Animation<double> __, Animation<double> ___) {
policy = FocusTraversalGroup.of(context);
return const SizedBox();
},
);
},
),
),
),
);
expect(policy, isA<WidgetOrderTraversalPolicy>());
});
testWidgets('Navigator inserts ReadingOrderTraversalPolicy if no ancestor has a policy', (WidgetTester tester) async {
FocusTraversalPolicy? policy;
await tester.pumpWidget(
TestDependencies(
child: Navigator(
onGenerateRoute: (RouteSettings settings) {
return PageRouteBuilder<void>(
settings: settings,
pageBuilder: (BuildContext context, Animation<double> __, Animation<double> ___) {
policy = FocusTraversalGroup.of(context);
return const SizedBox();
},
);
},
),
),
);
expect(policy, isA<ReadingOrderTraversalPolicy>());
});
} }
typedef AnnouncementCallBack = void Function(Route<dynamic>?); typedef AnnouncementCallBack = void Function(Route<dynamic>?);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment