diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index ca33cc8a570..43869ef1a5b 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.0.2 + +- Fixes `BuildContext` extension method `replaceNamed` to correctly pass `pathParameters` and `queryParameters`. + ## 7.0.1 - Adds a workaround for the `dart fix --apply` issue, https://github.com/dart-lang/sdk/issues/52233. diff --git a/packages/go_router/lib/src/misc/extensions.dart b/packages/go_router/lib/src/misc/extensions.dart index 05dbd0f3174..c4ff4ad6a95 100644 --- a/packages/go_router/lib/src/misc/extensions.dart +++ b/packages/go_router/lib/src/misc/extensions.dart @@ -130,5 +130,8 @@ extension GoRouterHelper on BuildContext { Map queryParameters = const {}, Object? extra, }) => - GoRouter.of(this).replaceNamed(name, extra: extra); + GoRouter.of(this).replaceNamed(name, + pathParameters: pathParameters, + queryParameters: queryParameters, + extra: extra); } diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 0104fca6eaf..53c28f821a1 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: 7.0.1 +version: 7.0.2 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/extension_test.dart b/packages/go_router/test/extension_test.dart new file mode 100644 index 00000000000..df12172074b --- /dev/null +++ b/packages/go_router/test/extension_test.dart @@ -0,0 +1,56 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:go_router/go_router.dart'; + +void main() { + group('replaceNamed', () { + Future createGoRouter( + WidgetTester tester, { + Listenable? refreshListenable, + }) async { + final GoRouter router = GoRouter( + initialLocation: '/', + routes: [ + GoRoute( + path: '/', + name: 'home', + builder: (_, __) => const _MyWidget(), + ), + GoRoute( + path: '/page-0/:tab', + name: 'page-0', + builder: (_, __) => const SizedBox()) + ], + ); + await tester.pumpWidget(MaterialApp.router( + routerConfig: router, + )); + return router; + } + + testWidgets('Passes GoRouter parameters through context call.', + (WidgetTester tester) async { + final GoRouter router = await createGoRouter(tester); + await tester.tap(find.text('Settings')); + await tester.pumpAndSettle(); + expect(router.location, '/page-0/settings?search=notification'); + }); + }); +} + +class _MyWidget extends StatelessWidget { + const _MyWidget(); + + @override + Widget build(BuildContext context) { + return ElevatedButton( + onPressed: () => context.replaceNamed('page-0', + pathParameters: {'tab': 'settings'}, + queryParameters: {'search': 'notification'}), + child: const Text('Settings')); + } +}