### Description of Change
This PR addresses the need for fragments/hashes to be treated as
first-party parameters within the `go_router` package, as highlighted in
[issue #150155](https://github.com/flutter/flutter/issues/150155).
Previously, users had to manually append the fragment to the URL, which
could lead to potential bugs. With this update, the `fragment` is now a
dedicated parameter, allowing for a more seamless and bug-free
integration.
#### Before:
```dart
final location = context.namedLocation('some_route'); // const nested records
// Manually adding the fragment, hoping there aren't any weird bugs surrounding it
context.replace('$location#https://a.url/that?i=mightuse');
```
#### After:
```dart
// Directly passing the fragment as a parameter
context.goNamed("details", fragment: 'https://a.url/that?i=mightuse');
// or
final location = GoRouterState.of(context).namedLocation(
'details',
fragment: 'section3',
);
context.go(location);
// or
final location = context.namedLocation(
'details',
fragment: 'section3',
);
context.go(location);
```
### Issues Fixed
This PR resolves [issue
#150155](https://github.com/flutter/flutter/issues/150155).
---
## 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`.)
- [x] I signed the [CLA].
- [✔️ ] The title of the PR starts with the name of the package
surrounded by square brackets, e.g. `[shared_preferences]`
- [✔️ ] 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.
If you need help, consider asking for advice on the #hackers-new channel
on [Discord].
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/packages/blob/main/CONTRIBUTING.md
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md
[relevant style guides]:
https://github.com/flutter/packages/blob/main/CONTRIBUTING.md#style
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[linked to at least one issue that this PR fixes]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#overview
[pub versioning philosophy]: https://dart.dev/tools/pub/versioning
[exempt from version changes]:
https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#version
[following repository CHANGELOG style]:
https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog-style
[exempt from CHANGELOG changes]:
https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog
[test-exempt]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#tests