diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md
index 2dd8a6b..b7e3c52 100644
--- a/packages/go_router/CHANGELOG.md
+++ b/packages/go_router/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.0.6
+
+- Exports inherited_go_router.dart file.
+
 ## 3.0.5
 
 - Add `dispatchNotification` method to `DummyBuildContext` in tests. (This
diff --git a/packages/go_router/lib/go_router.dart b/packages/go_router/lib/go_router.dart
index b331c61..403cca9 100644
--- a/packages/go_router/lib/go_router.dart
+++ b/packages/go_router/lib/go_router.dart
@@ -15,6 +15,7 @@
 export 'src/go_router.dart';
 export 'src/go_router_refresh_stream.dart';
 export 'src/go_router_state.dart';
+export 'src/inherited_go_router.dart';
 export 'src/typedefs.dart' show GoRouterPageBuilder, GoRouterRedirect;
 export 'src/url_path_strategy.dart';
 
diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml
index b333bfa..038fa10 100644
--- a/packages/go_router/pubspec.yaml
+++ b/packages/go_router/pubspec.yaml
@@ -1,7 +1,7 @@
 name: go_router
 description: A declarative router for Flutter based on Navigation 2 supporting
   deep linking, data-driven routes and more
-version: 3.0.5
+version: 3.0.6
 repository: https://github.com/flutter/packages/tree/main/packages/go_router
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22
 
diff --git a/packages/go_router/test/inherited_go_router_test.dart b/packages/go_router/test/inherited_go_router_test.dart
index cadf955..216b93c 100644
--- a/packages/go_router/test/inherited_go_router_test.dart
+++ b/packages/go_router/test/inherited_go_router_test.dart
@@ -6,7 +6,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:go_router/go_router.dart';
-import 'package:go_router/src/inherited_go_router.dart';
 
 void main() {
   group('updateShouldNotify', () {
@@ -71,6 +70,15 @@
     expect(properties.properties.first, isA<DiagnosticsProperty<GoRouter>>());
     expect(properties.properties.first.value, goRouter);
   });
+
+  testWidgets('mediates Widget\'s access to GoRouter.',
+      (WidgetTester tester) async {
+    final MockGoRouter router = MockGoRouter();
+    await tester.pumpWidget(MaterialApp(
+        home: InheritedGoRouter(goRouter: router, child: const _MyWidget())));
+    await tester.tap(find.text('My Page'));
+    expect(router.latestPushedName, 'my_page');
+  });
 }
 
 bool setupInheritedGoRouterChange({
@@ -103,3 +111,28 @@
   @override
   Widget build(BuildContext context) => Container();
 }
+
+class _MyWidget extends StatelessWidget {
+  const _MyWidget({Key? key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return ElevatedButton(
+        onPressed: () => context.pushNamed('my_page'),
+        child: const Text('My Page'));
+  }
+}
+
+class MockGoRouter extends GoRouter {
+  MockGoRouter() : super(routes: <GoRoute>[]);
+
+  late String latestPushedName;
+
+  @override
+  void pushNamed(String name,
+      {Map<String, String> params = const <String, String>{},
+      Map<String, String> queryParams = const <String, String>{},
+      Object? extra}) {
+    latestPushedName = name;
+  }
+}
