Skip to content

Conversation

@ksokolovskyi
Copy link
Contributor

Closes #176543

  • Adds topStart, topEnd, centerStart, centerEnd, bottomStart, and bottomEnd constants to AlignmentGeometry to enable AlignmentDirectional quick usage with dot shorthand syntax

Pre-launch Checklist

@github-actions github-actions bot added the framework flutter/packages/flutter repository. See also f: labels. label Oct 6, 2025
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds several directional static members (topStart, topEnd, centerStart, centerEnd, bottomStart, bottomEnd) to the AlignmentGeometry class. This allows for more convenient use of AlignmentDirectional constants with dot shorthand syntax. The changes are well-tested. I've found a minor copy-paste error in the documentation for one of the new members, which I've commented on.

Comment on lines 57 to 61
/// The top corner on the "start" side.
///
/// See also:
///
/// * [AlignmentDirectional.topStart], which is the same thing.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For a newbie, it might be unclear what "start" or "end" means. This was a little clearer before because AlignmentDirectional's docs hinted this was related to text direction.

I think we should add a hint to all these new directional members. For "start" side members, something like:

  /// The top corner on the "start" side.
  ///
  /// This can be used to indicate an offset from the left in [TextDirection.ltr]
  /// text and an offset from the right in [TextDirection.rtl] text without having
  /// to be aware of the current text direction.
  ///
  /// See also:
  ///
  /// * [AlignmentDirectional.topStart], which is the same thing.

And for "end" side members, something like:

  /// The top corner on the "end" side.
  ///
  /// This can be used to indicate an offset from the right in [TextDirection.ltr]
  /// text and an offset from the left in [TextDirection.rtl] text without having
  /// to be aware of the current text direction.
  ///
  /// See also:
  ///
  /// * [AlignmentDirectional.topEnd], which is the same thing.

@loic-sharma
Copy link
Member

@ksokolovskyi Thanks for the wonderful contribution! I left a nitpick, but once that's addressed I think this is good to go!

@ksokolovskyi ksokolovskyi force-pushed the add-alignment-directional-static-members branch from 5d134d1 to 58a3068 Compare October 10, 2025 12:04
@ksokolovskyi
Copy link
Contributor Author

/gemini

@gemini-code-assist
Copy link
Contributor

Hi @ksokolovskyi! It looks like you tried to invoke me with /gemini. Please note that /gemini by itself is not a recognized command. If you'd like me to perform a code review, please use /gemini review. If you'd like a summary of the pull request, please use /gemini summary. You can also type /gemini help to see a full list of available commands.

@ksokolovskyi
Copy link
Contributor Author

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds convenient static members for directional alignments (topStart, topEnd, etc.) to AlignmentGeometry, allowing for easier use with dot notation. The changes are well-implemented and include corresponding tests. My review includes one suggestion to use a documentation macro to reduce duplication in the comments for the new members, which will improve long-term maintainability.

Comment on lines +59 to +61
/// This can be used to indicate an offset from the left in [TextDirection.ltr]
/// text and an offset from the right in [TextDirection.rtl] text without having
/// to be aware of the current text direction.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To improve maintainability and reduce documentation duplication, consider using a {@macro} for the repeated explanation of directional alignment.

You could define a template, for example at the top of the file:

/// {@template flutter.painting.alignment.directional}
/// This can be used to indicate an offset from the left in [TextDirection.ltr]
/// text and an offset from the right in [TextDirection.rtl] text without having
/// to be aware of the current text direction.
/// {@endtemplate}

And then use /// {@macro flutter.painting.alignment.directional} for this and the other 5 new static members. This would replace the paragraph explaining the behavior with LTR/RTL text directions.

  /// {@macro flutter.painting.alignment.directional}

Copy link
Member

@loic-sharma loic-sharma Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ksokolovskyi This Gemini suggestion sounds good to me, but please use separate macros for start/end though.

@ksokolovskyi
Copy link
Contributor Author

@loic-sharma, thanks a lot for the review. What do you think about the latest Gemini suggestion?

@justinmc
Copy link
Contributor

I thought this PR was related to #176507, but looks like that one is on a different class and done for a different reason. Just commenting so I don't lose them again.

Copy link
Member

@loic-sharma loic-sharma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM once the Gemini suggestion is addressed!

@ksokolovskyi ksokolovskyi added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 23, 2025
@auto-submit auto-submit bot added this pull request to the merge queue Oct 23, 2025
@ksokolovskyi
Copy link
Contributor Author

@loic-sharma thanks a lot for your review!

Merged via the queue into flutter:master with commit 963511f Oct 23, 2025
77 checks passed
@loic-sharma
Copy link
Member

@ksokolovskyi my pleasure, thanks for the excellent contribution! :)

engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 23, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 24, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 24, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 24, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 24, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 24, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Oct 24, 2025
Roll Flutter from 75004a639ae4 to cb18290fa45e (48 revisions)

flutter/flutter@75004a6...cb18290

2025-10-24 [email protected] Remove unnecessary `deprecated` withOpacity in `text_button.0.dart‎` in examples (flutter/flutter#177374)
2025-10-24 [email protected] Roll Packages from 9ec29b6 to 53d6138 (3 revisions) (flutter/flutter#177502)
2025-10-24 [email protected] Roll Dart SDK from d3248b00f545 to a0480f399f8f (1 revision) (flutter/flutter#177498)
2025-10-24 [email protected] Roll Skia from a47931d09585 to 3ed332b77bec (3 revisions) (flutter/flutter#177487)
2025-10-24 [email protected] Roll Abseil to Chromium's 5b92b04a2e (based on Abseil commit fc4481e968) (flutter/flutter#177059)
2025-10-24 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Reverts "Enhance PR template with changelog and impact details (#177333)" (#177468)" (flutter/flutter#177499)
2025-10-24 [email protected] Document DropdownMenu showTrailingIcon and decorationBuilder interaction (flutter/flutter#177488)
2025-10-24 [email protected] Roll Dart SDK from 4a65fb890852 to d3248b00f545 (1 revision) (flutter/flutter#177486)
2025-10-24 [email protected] Fix bottom sheet Semantics route label for mismatched platforms (flutter/flutter#177094)
2025-10-24 [email protected] Roll Skia from eba11de00d5b to a47931d09585 (5 revisions) (flutter/flutter#177481)
2025-10-24 [email protected] Fix Dialog Semantics label and flags for mismatched platforms (flutter/flutter#176781)
2025-10-24 [email protected] Fix drawer Semantics for mismatched platforms (flutter/flutter#177095)
2025-10-24 [email protected] Roll Dart SDK from f7751ccea102 to 4a65fb890852 (2 revisions) (flutter/flutter#177480)
2025-10-23 [email protected] Change the root path of the license crawl to engine/src (flutter/flutter#177352)
2025-10-23 [email protected] [Material] Change default mouse cursor of buttons to basic arrow instead of click (except on web) (flutter/flutter#171796)
2025-10-23 [email protected] [Desktop] Propagate SemanticsNode::identifier to AXPlatformNodeDelegate::AuthorUniqueId (flutter/flutter#175405)
2025-10-23 [email protected] Roll Skia from 59ef57f4104e to eba11de00d5b (5 revisions) (flutter/flutter#177461)
2025-10-23 [email protected] Roll customer tests (flutter/flutter#177409)
2025-10-23 [email protected] Update CHANGELOG 3.35.7 notes (flutter/flutter#177463)
2025-10-23 [email protected] Marks Mac module_uiscene_test_ios to be unflaky (flutter/flutter#177378)
2025-10-23 [email protected] Allow empty dart defines in `flutter assemble` (flutter/flutter#177198)
2025-10-23 [email protected] Roll Packages from d113bbc to 9ec29b6 (12 revisions) (flutter/flutter#177455)
2025-10-23 [email protected] Implements engine-side declarative pointer event handling for semantics. (flutter/flutter#176974)
2025-10-23 [email protected] Fix the platform name of the windowing_test target for macOS in ci.yaml (flutter/flutter#177472)
2025-10-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Enhance PR template with changelog and impact details (#177333)" (flutter/flutter#177468)
2025-10-23 [email protected] Change Flutter APIs to use spans (flutter/flutter#177272)
2025-10-23 [email protected] Roll Dart SDK from 020988602772 to f7751ccea102 (4 revisions) (flutter/flutter#177449)
2025-10-23 [email protected] [macOS] Implement regular window (flutter/flutter#176361)
2025-10-23 [email protected] Enhance PR template with changelog and impact details (flutter/flutter#177333)
2025-10-23 [email protected] Roll Skia from 6e6acf6644ef to 59ef57f4104e (2 revisions) (flutter/flutter#177436)
2025-10-23 [email protected] Add directional static members to AlignmentGeometry. (flutter/flutter#176571)
2025-10-23 [email protected] Roll ICU from 1b2e3e8a421e to ff35c4f9df23 (5 revisions) (flutter/flutter#177434)
2025-10-23 [email protected] Adds a new CI build for Linux host DDM-enabled artifacts (flutter/flutter#177252)
2025-10-23 [email protected] Roll Skia from 920cdcadd74c to 6e6acf6644ef (1 revision) (flutter/flutter#177432)
2025-10-23 [email protected] Roll Skia from 8cd449e4953b to 920cdcadd74c (6 revisions) (flutter/flutter#177426)
2025-10-23 [email protected] Added ahem license (flutter/flutter#177423)
2025-10-23 [email protected] Roll Dart SDK from 75f6ccb9bdc5 to 020988602772 (1 revision) (flutter/flutter#177421)
2025-10-23 [email protected] [web] Set `pointer-events: none` for img-element-backed images (flutter/flutter#177418)
2025-10-22 [email protected] Remove the x64 version of build_ios_framework_module_test (flutter/flutter#177136)
2025-10-22 [email protected] Fix accessibility events not being correctly translated to ATK (flutter/flutter#176991)
2025-10-22 [email protected] Roll Skia from b55bd60ed95b to 8cd449e4953b (8 revisions) (flutter/flutter#177405)
2025-10-22 [email protected] Roll Dart SDK from c23010c4f9e6 to 75f6ccb9bdc5 (4 revisions) (flutter/flutter#177399)
2025-10-22 [email protected] Fixes crash when adding and removing mulitple page-based route (flutter/flutter#177338)
2025-10-22 [email protected] Move child parameter to end of RefreshIndicator constructor (flutter/flutter#177019)
2025-10-22 [email protected] refactor: migrate OpenUpwardsPageTransitionsBuilder to widgets (flutter/flutter#177080)
2025-10-22 [email protected] Delete stray 'text' file (flutter/flutter#177355)
...
reidbaker pushed a commit to AbdeMohlbi/flutter that referenced this pull request Dec 10, 2025
Closes flutter#176543

- Adds `topStart`, `topEnd`, `centerStart`, `centerEnd`, `bottomStart`,
and `bottomEnd` constants to `AlignmentGeometry` to enable
`AlignmentDirectional` quick usage with dot shorthand syntax

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Loïc Sharma <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add AlignmentDirectional constants to AlignmentGeometry

3 participants