Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[go_router] Fix: Consistent PopScope Handling on Root Routes issue #140869 #8045

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

omar-hanafy
Copy link
Contributor

@omar-hanafy omar-hanafy commented Nov 8, 2024

Description:
This PR addresses issue #140869 related to back button handling on root routes in GoRouterDelegate. The current _findCurrentNavigator() function only assigns NavigatorState when it can pop, which prevents PopScope and custom back button logic from triggering on root routes, especially on Android. Additionally, the onExit callbacks on routes requiring custom exit handling are affected.

What This PR Changes:

  1. Modification of _findCurrentNavigator():

    • Removed the conditional canPop check, setting state = navigatorKey.currentState; directly to ensure NavigatorState is always non-null, allowing consistent PopScope handling on root routes.
  2. Adjustment of popRoute() to Preserve onExit Logic:

    • Updated popRoute() to call maybePop() unconditionally to make sure PopScope can handle back button actions on root pages.
    • Added fallback to onExit logic in popRoute() if maybePop() does not handle the pop, this way, any route-specific exit callbacks are still functional.

Impact:

  • Resolves Inconsistent Back Button Handling: The fix enables PopScope and back button handling on root pages without affecting nested routes or shell routes.
  • Maintains onExit Callback Functionality: onExit is invoked when maybePop() doesn’t handle the pop, preserving custom exit behaviors.

Pre-launch Checklist

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • I read the [Tree Hygiene] page, which explains my responsibilities.
  • I read and followed the [relevant style guides] and ran the auto-formatter. (Unlike the flutter/flutter repo, the flutter/packages repo does use dart format.)
  • I signed the [CLA].
  • The title of the PR starts with the name of the package surrounded by square brackets, e.g. [go_router]
  • I [linked to at least one issue that this PR fixes] in the description above.
  • I updated pubspec.yaml with an appropriate new version according to the [pub versioning philosophy], or this PR is [exempt from version changes].
  • I updated CHANGELOG.md to add a description of the change, [following repository CHANGELOG style], or this PR is [exempt from CHANGELOG changes].
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is [test-exempt].
  • All existing and new tests are passing.

@flutter-dashboard
Copy link

It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!).

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

Fixed WillPopScope/PopScope doesn't trigger with back button navigation on root screens.

Added a test for PopScope, and fixed some test failures in the delegate_test.
@omar-hanafy
Copy link
Contributor Author

Hi @chunhtai,

This PR is ready for your review. All checks have passed, and there are no issues reported. When you have a moment, could you please take a look and provide an approval if everything looks good? Your review is the last step for merging.

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant