diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index feba3bdfa0e..5cc3fdfc136 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,6 +1,10 @@ +## 15.2.1 + +* Fixes Popping state and re-rendering scaffold at the same time doesn't update the URL on web. + ## 15.2.0 -- `GoRouteData` now defines `.location`, `.go(context)`, `.push(context)`, `.pushReplacement(context)`, and `replace(context)` to be used for [Type-safe routing](https://pub.dev/documentation/go_router/latest/topics/Type-safe%20routes-topic.html). **Requires go_router_builder >= 3.0.0**. +* `GoRouteData` now defines `.location`, `.go(context)`, `.push(context)`, `.pushReplacement(context)`, and `replace(context)` to be used for [Type-safe routing](https://pub.dev/documentation/go_router/latest/topics/Type-safe%20routes-topic.html). **Requires go_router_builder >= 3.0.0**. ## 15.1.3 diff --git a/packages/go_router/lib/src/router.dart b/packages/go_router/lib/src/router.dart index 6dfef3166a6..9962dd2d449 100644 --- a/packages/go_router/lib/src/router.dart +++ b/packages/go_router/lib/src/router.dart @@ -496,12 +496,16 @@ class GoRouter implements RouterConfig { /// /// If the top-most route is a pop up or dialog, this method pops it instead /// of any GoRoute under it. + /// + /// Ensure that the `value` of `routeInformationProvider` is synced + /// with `routerDelegate.currentConfiguration`. void pop([T? result]) { assert(() { log('popping ${routerDelegate.currentConfiguration.uri}'); return true; }()); routerDelegate.pop(result); + restore(routerDelegate.currentConfiguration); } /// Refresh the route. diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 9367be85902..190f17af393 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: 15.2.0 +version: 15.2.1 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/delegate_test.dart b/packages/go_router/test/delegate_test.dart index ad628610fd1..7fa52548427 100644 --- a/packages/go_router/test/delegate_test.dart +++ b/packages/go_router/test/delegate_test.dart @@ -78,6 +78,28 @@ Future createGoRouterWithStatefulShellRoute( void main() { group('pop', () { + testWidgets('restore() update currentConfiguration in pop()', + (WidgetTester tester) async { + final ValueNotifier valueNotifier = ValueNotifier(0); + final GoRouter goRouter = await createGoRouter(tester, + refreshListenable: valueNotifier, dispose: false); + + goRouter.push('/a'); + await tester.pumpAndSettle(); + + goRouter.pop(); + valueNotifier.notifyListeners(); + await tester.pumpAndSettle(); + expect( + goRouter + .routerDelegate.currentConfiguration.matches.last.matchedLocation, + '/', + ); + + addTearDown(valueNotifier.dispose); + addTearDown(goRouter.dispose); + }); + testWidgets('removes the last element', (WidgetTester tester) async { final GoRouter goRouter = await createGoRouter(tester) ..push('/error');