[go_router] Fix: Consistent PopScope Handling on Root Routes issue #140869 #8045
+74
−22
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description:
This PR addresses issue #140869 related to back button handling on root routes in
GoRouterDelegate
. The current_findCurrentNavigator()
function only assignsNavigatorState
when it can pop, which preventsPopScope
and custom back button logic from triggering on root routes, especially on Android. Additionally, theonExit
callbacks on routes requiring custom exit handling are affected.What This PR Changes:
Modification of
_findCurrentNavigator()
:canPop
check, settingstate = navigatorKey.currentState;
directly to ensureNavigatorState
is always non-null, allowing consistentPopScope
handling on root routes.Adjustment of
popRoute()
to PreserveonExit
Logic:popRoute()
to callmaybePop()
unconditionally to make surePopScope
can handle back button actions on root pages.onExit
logic inpopRoute()
ifmaybePop()
does not handle the pop, this way, any route-specific exit callbacks are still functional.Impact:
PopScope
and back button handling on root pages without affecting nested routes or shell routes.onExit
Callback Functionality:onExit
is invoked whenmaybePop()
doesn’t handle the pop, preserving custom exit behaviors.Pre-launch Checklist
dart format
.)[go_router]
pubspec.yaml
with an appropriate new version according to the [pub versioning philosophy], or this PR is [exempt from version changes].CHANGELOG.md
to add a description of the change, [following repository CHANGELOG style], or this PR is [exempt from CHANGELOG changes].///
).