Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/go_router/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 15.1.2

- Fixes focus request propagation from `GoRouter` to `Navigator` by properly handling the `requestFocus` parameter.

## 15.1.1

- Adds missing `caseSensitive` to `GoRouteData.$route`.
Expand Down
5 changes: 5 additions & 0 deletions packages/go_router/lib/src/builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ class RouteBuilder {
configuration: configuration,
errorBuilder: errorBuilder,
errorPageBuilder: errorPageBuilder,
requestFocus: requestFocus,
),
);
}
Expand All @@ -138,6 +139,7 @@ class _CustomNavigator extends StatefulWidget {
required this.configuration,
required this.errorBuilder,
required this.errorPageBuilder,
required this.requestFocus
});

final GlobalKey<NavigatorState> navigatorKey;
Expand All @@ -155,6 +157,7 @@ class _CustomNavigator extends StatefulWidget {
final String? navigatorRestorationId;
final GoRouterWidgetBuilder? errorBuilder;
final GoRouterPageBuilder? errorPageBuilder;
final bool requestFocus;

@override
State<StatefulWidget> createState() => _CustomNavigatorState();
Expand Down Expand Up @@ -295,6 +298,7 @@ class _CustomNavigatorState extends State<_CustomNavigator> {
// This is used to recursively build pages under this shell route.
errorBuilder: widget.errorBuilder,
errorPageBuilder: widget.errorPageBuilder,
requestFocus: widget.requestFocus
);
},
);
Expand Down Expand Up @@ -437,6 +441,7 @@ class _CustomNavigatorState extends State<_CustomNavigator> {
controller: _controller!,
child: Navigator(
key: widget.navigatorKey,
requestFocus: widget.requestFocus,
restorationScopeId: widget.navigatorRestorationId,
pages: _pages!,
observers: widget.observers,
Expand Down
51 changes: 51 additions & 0 deletions packages/go_router/test/builder_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,57 @@ void main() {
(shellNavigatorKey.currentWidget as Navigator?)?.restorationScopeId,
'scope1');
});

testWidgets('GoRouter requestFocus defaults to true',
(WidgetTester tester) async {
final router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => const Scaffold(
body: Center(child: Text('Home')),
),
),
],
);

await tester.pumpWidget(
MaterialApp.router(
routerConfig: router,
),
);

addTearDown(() => router.dispose());

final navigator = tester.widget<Navigator>(find.byType(Navigator));
expect(navigator.requestFocus, isTrue);
});

testWidgets('GoRouter requestFocus can be set to false',
(WidgetTester tester) async {
final router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => const Scaffold(
body: Center(child: Text('Home')),
),
),
],
requestFocus: false,
);

await tester.pumpWidget(
MaterialApp.router(
routerConfig: router,
),
);

addTearDown(() => router.dispose());

final navigator = tester.widget<Navigator>(find.byType(Navigator));
expect(navigator.requestFocus, isFalse);
});
});
}

Expand Down