From 7e633180b67eb948fb6efc6794ee1badf7f9a668 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Tue, 4 Feb 2025 10:37:48 +0100 Subject: [PATCH 01/10] Secured empty matches in canPop If current configuration matches is empty, canPop throws exceptions instead of quit properly --- packages/go_router/lib/src/delegate.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/go_router/lib/src/delegate.dart b/packages/go_router/lib/src/delegate.dart index 3b90297be28d..23fee738dff3 100644 --- a/packages/go_router/lib/src/delegate.dart +++ b/packages/go_router/lib/src/delegate.dart @@ -81,6 +81,7 @@ class GoRouterDelegate extends RouterDelegate if (navigatorKey.currentState?.canPop() ?? false) { return true; } + if (currentConfiguration.matches.isEmpty) return false; RouteMatchBase walker = currentConfiguration.matches.last; while (walker is ShellRouteMatch) { if (walker.navigatorKey.currentState?.canPop() ?? false) { From a42644397b1b0699ed8e5e90a63c5d22ca09a8c9 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:14:03 +0100 Subject: [PATCH 02/10] Update pubspec.yaml --- packages/go_router/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 204db07f029f..4e8394267f63 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: 14.7.2 +version: 14.7.3 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 From 95f4029e98abfa54dfde0451b7d71ffb43ef077e Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:14:52 +0100 Subject: [PATCH 03/10] Update CHANGELOG.md --- packages/go_router/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index d51aaf244a37..7611f6d52cca 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## 14.7.3 + +- Fixes lack of elements in currentConfiguration's matches of pop method + ## 14.7.2 - Add missing `await` keyword to `onTap` callback in `navigation.md`. From 52a5e5036f9246014d39f9e934b66c0646d81f52 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Tue, 4 Feb 2025 12:30:09 +0100 Subject: [PATCH 04/10] Update CHANGELOG.md reset --- packages/go_router/CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index 7611f6d52cca..d51aaf244a37 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,7 +1,3 @@ -## 14.7.3 - -- Fixes lack of elements in currentConfiguration's matches of pop method - ## 14.7.2 - Add missing `await` keyword to `onTap` callback in `navigation.md`. From b22c47a1e590e097b759126a14f4fe81656b5dd0 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Tue, 4 Feb 2025 12:30:27 +0100 Subject: [PATCH 05/10] Update pubspec.yaml reset --- packages/go_router/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 4e8394267f63..204db07f029f 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: 14.7.3 +version: 14.7.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 From e8fe4746c9eed9ad31b40618b42cd6cd50ea2d28 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:45:57 +0100 Subject: [PATCH 06/10] Update delegate.dart analyzer --- packages/go_router/lib/src/delegate.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/go_router/lib/src/delegate.dart b/packages/go_router/lib/src/delegate.dart index 23fee738dff3..aa95fdb39eb3 100644 --- a/packages/go_router/lib/src/delegate.dart +++ b/packages/go_router/lib/src/delegate.dart @@ -81,7 +81,9 @@ class GoRouterDelegate extends RouterDelegate if (navigatorKey.currentState?.canPop() ?? false) { return true; } - if (currentConfiguration.matches.isEmpty) return false; + if (currentConfiguration.matches.isEmpty) { + return false; + } RouteMatchBase walker = currentConfiguration.matches.last; while (walker is ShellRouteMatch) { if (walker.navigatorKey.currentState?.canPop() ?? false) { From 95ead0098655105821a6f0498b3179c2cce5b989 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:03:14 +0100 Subject: [PATCH 07/10] Added test for lack of matches --- packages/go_router/test/delegate_test.dart | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/go_router/test/delegate_test.dart b/packages/go_router/test/delegate_test.dart index 75db026fca61..81d9096827eb 100644 --- a/packages/go_router/test/delegate_test.dart +++ b/packages/go_router/test/delegate_test.dart @@ -317,6 +317,20 @@ void main() { expect(goRouter.routerDelegate.canPop(), true); }, ); + testWidgets( + 'It should return false if there are no matches in the stack', + (WidgetTester tester) async { + final GoRouter goRouter = GoRouter( + initialLocation: '/', + routes: [], + ); + addTearDown(goRouter.dispose); + await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter)); + await tester.pumpAndSettle(); + expect(goRouter.routerDelegate.currentConfiguration.matches.length, 0); + expect(goRouter.routerDelegate.canPop(), false); + }, + ); }); group('pushReplacement', () { From f5599875e345ca754da0da8cede24e327c599d95 Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:06:23 +0100 Subject: [PATCH 08/10] Update CHANGELOG.md --- packages/go_router/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index d51aaf244a37..197403c1895c 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## 14.7.3 + +- Secured canPop method for the lack of matches in routerDelegate's configuration. + ## 14.7.2 - Add missing `await` keyword to `onTap` callback in `navigation.md`. From 1e3891d736ca50bed8177f7b5dc5a5851899e19b Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:06:38 +0100 Subject: [PATCH 09/10] Update pubspec.yaml 14.7.3 --- packages/go_router/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 204db07f029f..4e8394267f63 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: 14.7.2 +version: 14.7.3 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 From 283b8b8acd8551cdba6473d697c27e84598aaf9b Mon Sep 17 00:00:00 2001 From: Andrzej Przedecki <108667553+aprzedecki@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:27:47 +0100 Subject: [PATCH 10/10] Update delegate_test.dart format --- packages/go_router/test/delegate_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/go_router/test/delegate_test.dart b/packages/go_router/test/delegate_test.dart index 81d9096827eb..ad628610fd18 100644 --- a/packages/go_router/test/delegate_test.dart +++ b/packages/go_router/test/delegate_test.dart @@ -330,7 +330,7 @@ void main() { expect(goRouter.routerDelegate.currentConfiguration.matches.length, 0); expect(goRouter.routerDelegate.canPop(), false); }, - ); + ); }); group('pushReplacement', () {