Repository navigation
[go_router] Preserve nested pushes during config updates - #12611
auto-submit[bot] merged 2 commits into
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
There was a problem hiding this comment.
Code Review
This pull request modifies RouteConfiguration.reparse to use a new recursive helper function, _imperativeMatches, which retrieves nested ImperativeRouteMatch instances from shell routes. This change ensures that pushed routes nested within a shell are preserved during reparsing when a dynamic routing configuration changes. A new widget test has been added to verify this behavior, and a pending changelog entry has been created. There are no review comments, and I have no feedback to provide.
elliette
left a comment
There was a problem hiding this comment.
Thank you, looks good to me!
…er#193289) Roll Packages from c2b58e1a97fb to 431ea69a42e2 (56 revisions) flutter/packages@c2b58e1...431ea69 2026-09-24 [email protected] [cross_file] Updates cross_file to a package separated federated plugin (flutter/packages#11010) 2026-09-23 [email protected] [material_ui] Remove static access of `copyWith` from `dart fix` golden tests for `ThemeData/TextTheme` (flutter/packages#12994) 2026-09-23 [email protected] [camera_avfoundation] Replace deprecated high-resolution capture APIs (flutter/packages#12372) 2026-09-23 [email protected] [pigeon] update nullish checks to use new isNullish method (flutter/packages#12985) 2026-09-23 [email protected] [ci] Assign batch release PR approver as reviewer on sync-back PR (flutter/packages#12976) 2026-09-23 [email protected] [image_picker] Fix scaling 10-bit images (flutter/packages#12557) 2026-09-23 [email protected] [material_ui] Improve Autocomplete, DrawerHeader, and Tooltip accessibility (flutter/packages#12918) 2026-09-23 [email protected] [google_fonts] Decouple GoogleFontsLite for full tree-shaking and add full feature parity (flutter/packages#12830) 2026-09-23 [email protected] [file_selector] Ignore flakey `file_selector_android` tests (flutter/packages#12992) 2026-09-23 [email protected] [CI] Remove bringup from `Mac_arm64 build_all_packages` targets (flutter/packages#12978) 2026-09-22 [email protected] [material_ui] Unskip 5 passing web tests in bottom_app_bar_test and text_field_test (flutter/packages#12983) 2026-09-22 [email protected] [cupertino_ui] Unskip 5 passing web tests in adaptive_text_selection_toolbar_test and text_field_test (flutter/packages#12984) 2026-09-22 [email protected] [go_router] Fix ShellRoute chrome dropped from semantics tree by ModalBarrier (flutter/packages#12353) 2026-09-22 [email protected] [material_ui] Add contrastLevel for M3 ColorScheme (flutter/packages#12743) 2026-09-22 [email protected] [go_router] Preserve nested pushes during config updates (flutter/packages#12611) 2026-09-22 [email protected] [material_ui] Migrate M3 Chip template to use new gen_defaults (flutter/packages#12847) 2026-09-22 [email protected] [material_ui] Fix LocalHistoryEntry leak when double tapping Drawer scrim (flutter/packages#12552) 2026-09-22 [email protected] Update suggested reviewers (flutter/packages#12974) 2026-09-22 [email protected] Sync release-material_ui-1.4.0 to main (flutter/packages#12966) 2026-09-22 [email protected] Sync release-cupertino_ui-1.1.1 to main (flutter/packages#12965) 2026-09-21 [email protected] [ci] Update repo for 3.47 stable release (flutter/packages#12959) 2026-09-21 [email protected] Manual roll Flutter from 27fec0e to 4fcd90b (1 revision) (flutter/packages#12904) 2026-09-21 [email protected] Revert "[go_router_builder] Migrate to material_ui" (flutter/packages#12962) 2026-09-21 [email protected] [material_ui] Update `material_ui` tests to prevent them from failing when framework `TextStyle` changes (flutter/packages#12728) 2026-09-21 [email protected] [go_router_builder] Migrate to material_ui (flutter/packages#12913) 2026-09-21 [email protected] [material_ui, cupertino_ui] Bump Flutter version from to 3.47 (flutter/packages#12944) 2026-09-21 [email protected] [cupertino_ui] Work around dart2wasm optional parameter inference bug in example checkbox tests (flutter/packages#12961) 2026-09-21 [email protected] [cupertino_ui] Work around dart2wasm optional parameter inference bug in checkbox_test.dart (flutter/packages#12956) 2026-09-21 [email protected] [google_sign_in] PR 3/4 Migrate ViewProvider and GID SDK wrappers from Objective-C to Swift (flutter/packages#12657) 2026-09-21 [email protected] [google_sign_in] PR 2/4 Migrate the plugin class from Objective-C to Swift. (flutter/packages#12655) 2026-09-20 [email protected] [cross_file_darwin] iOS/macOS implementation of `cross_file` (flutter/packages#12910) 2026-09-20 [email protected] [cross_file_web] Web implementation of `cross_file` (flutter/packages#12908) 2026-09-20 [email protected] [material_ui] Migrate M3 `InputChip` template to use new gen_defaults (flutter/packages#12850) 2026-09-20 [email protected] [material_ui] Migrate M3 Checkbox defaults to new gen_defaults (flutter/packages#12816) 2026-09-20 [email protected] [material_ui] Migrate M3 `FilterChip` template to use new gen_defaults (flutter/packages#12849) 2026-09-19 [email protected] [material_ui] Announce PopupMenuButton with a child as a button (flutter/packages#12585) 2026-09-19 [email protected] Roll Flutter (stable) from 9584c67 to 6a19cca (7 revisions) (flutter/packages#12950) 2026-09-18 [email protected] [material_ui] Reduce the `material_ui` non-wasm web test suite (flutter/packages#12763) 2026-09-18 [email protected] Replace `Mac_x64` builders with `Mac_arm64` ones (flutter/packages#12941) 2026-09-18 [email protected] [in_app_purchase_storekit] Use `_$SKPaymentDiscountWrapperToJson` (flutter/packages#12721) 2026-09-18 [email protected] [In_app _purchase] README excerpt examples and changelog (flutter/packages#12739) 2026-09-18 [email protected] [material_ui] Add alternative input method for `RangeSlider` in `NavigationMode.directional` (flutter/packages#12630) 2026-09-18 [email protected] [cross_file_android] Android implementation of `cross_file` (flutter/packages#12909) 2026-09-18 [email protected] [camera_platform_interface] Adds videoOutputPath support to startVideoRecording (flutter/packages#12667) 2026-09-17 [email protected] [cupertino_ui] Migrate a snippet in `CupertinoCheckbox`'s API doc to `{@example}` and add unit tests (flutter/packages#12180) 2026-09-17 [email protected] [material_ui] Default gen_defaults color helper prefix (flutter/packages#12848) ...
`RouteConfiguration.reparse` currently restores only imperative matches at the root of the match list. Imperative matches created by pushing a route owned by a `StatefulShellRoute` branch are nested inside `ShellRouteMatch.matches`, so a dynamic `RoutingConfig` update silently drops them. This change recursively enumerates imperative matches within shell matches and replays them against the new routing configuration. Rebuilding each match preserves the pushed navigation stack without retaining stale route objects from the previous configuration. The regression test covers this sequence using the go_router test suite's standard A/B route naming: 1. Start at `/a`. 2. Push `/b/details` into another shell branch. 3. Push `/top` above the shell. 4. Update the routing configuration. 5. Pop `/top` and verify that `Screen B Detail` is restored. Fixes flutter/flutter#167344. ## Pre-Review Checklist This is a draft pending the author's review of the contribution, AI-assistance, Tree Hygiene, and CLA requirements above. ### Local verification - `flutter_plugin_tools format --packages go_router` - `flutter_plugin_tools analyze --packages go_router` - `flutter_plugin_tools test --packages go_router` - `flutter_plugin_tools validate --check-for-missing-changes --packages go_router` [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
RouteConfiguration.reparsecurrently restores only imperative matches at the root of the match list. Imperative matches created by pushing a route owned by aStatefulShellRoutebranch are nested insideShellRouteMatch.matches, so a dynamicRoutingConfigupdate silently drops them.This change recursively enumerates imperative matches within shell matches and replays them against the new routing configuration. Rebuilding each match preserves the pushed navigation stack without retaining stale route objects from the previous configuration.
The regression test covers this sequence using the go_router test suite's standard A/B route naming:
/a./b/detailsinto another shell branch./topabove the shell./topand verify thatScreen B Detailis restored.Fixes flutter/flutter#167344.
Pre-Review Checklist
[shared_preferences]///).This is a draft pending the author's review of the contribution, AI-assistance, Tree Hygiene, and CLA requirements above.
Local verification
flutter_plugin_tools format --packages go_routerflutter_plugin_tools analyze --packages go_routerflutter_plugin_tools test --packages go_routerflutter_plugin_tools validate --check-for-missing-changes --packages go_routerFootnotes
Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. ↩ ↩2