Repository navigation
[go_router_builder] Support extension types - #9458
Conversation
| return '$stateValue as $castType'; | ||
| } | ||
|
|
||
| final String parseTypeName = |
There was a problem hiding this comment.
Should we guard against no primitive type? since this is following by a hardcode tryParse, may as well only allow certain numeric types?
There was a problem hiding this comment.
I think you are right in pointing this out. I restricted the type and handled it correctly. 61901a3
chunhtai
left a comment
There was a problem hiding this comment.
code lgtm, just need an example
| ## Type conversions | ||
|
|
||
| The code generator can convert simple types like `int` and `enum` to/from the | ||
| The code generator can convert simple types like `int`, `enum`, and `extension type` to/from the |
There was a problem hiding this comment.
We should add a new example in example/ folder
hannah-hyj
left a comment
There was a problem hiding this comment.
LGTM, thank you for writing the examples!
| @@ -0,0 +1,408 @@ | |||
| // Copyright 2013 The Flutter Authors. All rights reserved. | |||
There was a problem hiding this comment.
typo in the file name: typs-> types
| } | ||
|
|
||
| /// A type helper for extension types. | ||
| /// Suppoted extension types are: |
|
@koji-1009 You had a failure that I just reran. If it still fails, can you take a look? Maybe you just need to push a merge commit / rebase. |
|
@justinmc This “NEXT” section was described at #9453. Because of this, go_router_builder is in a difficult situation for minor version upgrades until the I believe that the problem of |
|
Added examples file. Merged the main branch, and all tests passed 👍 |
* main: (56 commits) [go_router_builder] Support extension types (flutter#9458) Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter#9803) [go_router_builder] Migrate to Element2 API and update dependencies (flutter#9649) [in_app_purchase_storekit] Add support for quantity in consumable product purchases (#171570) (flutter#9698) [pigeon] Improves documentation of `ProxyApi` and moves helper functions to a separate file (flutter#9756) Roll Flutter from 1590543 to e2a347b (1 revision) (flutter#9784) [camera_avfoundation] Implementation swift migration - part 11 (flutter#9690) [camera_avfoundation] Fix crash when streaming while recording (flutter#9691) Roll Flutter from 3821790 to 1590543 (14 revisions) (flutter#9780) Roll Flutter from 92a6bfb to 3821790 (17 revisions) (flutter#9778) [video_player] Improve KVO handling on iOS (flutter#9718) [dependabot]: Bump the test-dependencies group across 15 directories with 7 updates (flutter#9736) Roll Flutter from 9de63a0 to 92a6bfb (11 revisions) (flutter#9769) [google_maps_flutter_platform_interface] Add Advanced markers support (flutter#9737) [camera_android_camerax] Re-land "Force new Surface for each SurfaceRequest" (flutter#9760) [google_maps_flutter] Add ability to perform Google Maps SDK warmup (flutter#9674) Roll Flutter from 59fc766 to 9de63a0 (6 revisions) (flutter#9764) [webview_flutter_wkwebview] Extended Web View API on iOS to add flexibility when working with local HTML content (flutter#8787) [local_auth] Differentiate iOS authentication errors (flutter#9705) manual roll to 59fc766 (flutter#9758) ... # Conflicts: # packages/go_router_builder/lib/src/type_helpers.dart # packages/go_router_builder/pubspec.yaml
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 34c2a3b to f4334d2 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 34c2a3b to f4334d2 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 34c2a3b to f4334d2 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 34c2a3b to f4334d2 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 34c2a3b to f4334d2 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 34c2a3b to f4334d2 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from e2a347b to 34c2a3b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
fix flutter/flutter#170870 Extended `type_helpers.dart` to support [Dart extension types](https://dart.dev/language/extension-types). ## Pre-Review Checklist [^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.
Adds build-time detection of routes that resolve to the same URL pattern. `go_router` matches the first route that fits, so a duplicated path silently makes the later route's page unreachable, and `LaterRoute().go(context)` navigates you to `EarlierRoute`'s page instead. Today nothing surfaces that until you run into the issue at runtime. Reported as a warning by default, and new `duplicate_route_paths` builder option accepts `warning` (the default), `error`, and `ignore`, so teams whose duplicates are mistakes can fail the build instead. **Before**, `go_router_builder`'s own example app built clean despite two duplicate registrations: ``` $ dart run build_runner build [INFO] Succeeded after 14s with 36 outputs ``` **After**: ``` $ dart run build_runner build W go_router_builder on lib/all_types.dart: Duplicate route path detected: DoubleRoute is declared more than once at "double-route/:requiredDoubleField". ``` That duplicate was real. `DoubleRoute` had been registered twice since #2395 (2022) and `DoubleExtensionRoute` since #9458 (2025). Both were unreachable, and this PR removes them. The only change to the generated output is the dead route entries. What competes for a URL namespace: - Sibling routes, with path parameters normalized, so `product/:id` and `product/:productId` are one pattern. - Routes inside shell routes and `StatefulShellRoute` branches, since those own no path of their own and their children compete with the routes around them. - Relative routes, which own their path like any other route, so `/home/details/edit` and `/home/edit` stay distinct. - Routes from separate annotations, since the generated `$appRoutes` collects them into one list. Scope is the library, `part` files included. **Testing:** five new golden inputs in `test_inputs/` cover sibling duplicates, parameter-name-only differences, `StatefulShellRoute` branches, relative routes, cross-annotation duplicates, and the sound same-class grouping case. The golden harness gained two optional companion files per input, documented in the README: `<name>.dart.options` supplies JSON builder options so each severity is exercised through the real option-parsing path, and `<name>.dart.warnings` asserts logged warnings, with an empty file asserting silence. Fixes flutter/flutter#190741 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^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.
…er#12399) Adds build-time detection of routes that resolve to the same URL pattern. `go_router` matches the first route that fits, so a duplicated path silently makes the later route's page unreachable, and `LaterRoute().go(context)` navigates you to `EarlierRoute`'s page instead. Today nothing surfaces that until you run into the issue at runtime. Reported as a warning by default, and new `duplicate_route_paths` builder option accepts `warning` (the default), `error`, and `ignore`, so teams whose duplicates are mistakes can fail the build instead. **Before**, `go_router_builder`'s own example app built clean despite two duplicate registrations: ``` $ dart run build_runner build [INFO] Succeeded after 14s with 36 outputs ``` **After**: ``` $ dart run build_runner build W go_router_builder on lib/all_types.dart: Duplicate route path detected: DoubleRoute is declared more than once at "double-route/:requiredDoubleField". ``` That duplicate was real. `DoubleRoute` had been registered twice since flutter#2395 (2022) and `DoubleExtensionRoute` since flutter#9458 (2025). Both were unreachable, and this PR removes them. The only change to the generated output is the dead route entries. What competes for a URL namespace: - Sibling routes, with path parameters normalized, so `product/:id` and `product/:productId` are one pattern. - Routes inside shell routes and `StatefulShellRoute` branches, since those own no path of their own and their children compete with the routes around them. - Relative routes, which own their path like any other route, so `/home/details/edit` and `/home/edit` stay distinct. - Routes from separate annotations, since the generated `$appRoutes` collects them into one list. Scope is the library, `part` files included. **Testing:** five new golden inputs in `test_inputs/` cover sibling duplicates, parameter-name-only differences, `StatefulShellRoute` branches, relative routes, cross-annotation duplicates, and the sound same-class grouping case. The golden harness gained two optional companion files per input, documented in the README: `<name>.dart.options` supplies JSON builder options so each severity is exercised through the real option-parsing path, and `<name>.dart.warnings` asserts logged warnings, with an empty file asserting silence. Fixes flutter/flutter#190741 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^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.
…er#12399) Adds build-time detection of routes that resolve to the same URL pattern. `go_router` matches the first route that fits, so a duplicated path silently makes the later route's page unreachable, and `LaterRoute().go(context)` navigates you to `EarlierRoute`'s page instead. Today nothing surfaces that until you run into the issue at runtime. Reported as a warning by default, and new `duplicate_route_paths` builder option accepts `warning` (the default), `error`, and `ignore`, so teams whose duplicates are mistakes can fail the build instead. **Before**, `go_router_builder`'s own example app built clean despite two duplicate registrations: ``` $ dart run build_runner build [INFO] Succeeded after 14s with 36 outputs ``` **After**: ``` $ dart run build_runner build W go_router_builder on lib/all_types.dart: Duplicate route path detected: DoubleRoute is declared more than once at "double-route/:requiredDoubleField". ``` That duplicate was real. `DoubleRoute` had been registered twice since flutter#2395 (2022) and `DoubleExtensionRoute` since flutter#9458 (2025). Both were unreachable, and this PR removes them. The only change to the generated output is the dead route entries. What competes for a URL namespace: - Sibling routes, with path parameters normalized, so `product/:id` and `product/:productId` are one pattern. - Routes inside shell routes and `StatefulShellRoute` branches, since those own no path of their own and their children compete with the routes around them. - Relative routes, which own their path like any other route, so `/home/details/edit` and `/home/edit` stay distinct. - Routes from separate annotations, since the generated `$appRoutes` collects them into one list. Scope is the library, `part` files included. **Testing:** five new golden inputs in `test_inputs/` cover sibling duplicates, parameter-name-only differences, `StatefulShellRoute` branches, relative routes, cross-annotation duplicates, and the sound same-class grouping case. The golden harness gained two optional companion files per input, documented in the README: `<name>.dart.options` supplies JSON builder options so each severity is exercised through the real option-parsing path, and `<name>.dart.warnings` asserts logged warnings, with an empty file asserting silence. Fixes flutter/flutter#190741 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^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.
flutter/packages@6cb9113...09533b7 2025-08-14 [email protected] Roll Flutter from 524109b to 39100f6 (18 revisions) (flutter/packages#9807) 2025-08-14 [email protected] Add review agent style guidelines to .gemini/styleguide.md (flutter/packages#9805) 2025-08-13 [email protected] [go_router_builder] Support extension types (flutter/packages#9458) 2025-08-13 [email protected] Roll Flutter from 3ad3a5b to 524109b (41 revisions) (flutter/packages#9803) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
fix flutter/flutter#170870
Extended
type_helpers.dartto support Dart extension types.Pre-Review Checklist
[shared_preferences]pubspec.yamlwith an appropriate new version according to the pub versioning philosophy, or I have commented below to indicate which version change exemption this PR falls under1.CHANGELOG.mdto add a description of the change, following repository CHANGELOG style, or I have commented below to indicate which CHANGELOG exemption this PR falls under1.///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
Footnotes
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 ↩3