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
child: AbsorbPointer(
absorbing: false, // it's mutated directly by _cancelActivePointers above
child: FocusTraversalGroup(
policy: FocusTraversalGroup.maybeOf(context),
child: Focus(
focusNode: focusNode,
autofocus: true,
......
......@@ -3775,8 +3775,7 @@ void main() {
expect(focusNode.hasFocus, true);
});
testWidgets('Navigator does not request focus if requestFocus is false',
(WidgetTester tester) async {
testWidgets('Navigator does not request focus if requestFocus is false', (WidgetTester tester) async {
final GlobalKey navigatorKey = GlobalKey();
final GlobalKey innerKey = GlobalKey();
final Map<String, Widget> routes = <String, Widget>{
......@@ -3873,6 +3872,49 @@ void main() {
await tester.pumpWidget(Container(child: build(key)));
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>?);
......
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