Thanks to visit codestin.com
Credit goes to github.com

Skip to content

docs: Clarify Transform.rotate origin interaction with alignment #163934

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

Open
wants to merge 24 commits into
base: master
Choose a base branch
from

Conversation

SunkenInTime
Copy link

This commit improves the documentation for Transform.rotate's origin property to clarify its interaction with the alignment property.

Before: The documentation did not clearly explain how the origin offset interacts with the alignment property, potentially leading to confusion about the actual rotation point.

After: The documentation now emphasizes that the origin offset is applied after the alignment transformation, and provides examples to avoid common misinterpretations.

This change ensures developers can correctly position the rotation point.

This commit improves the documentation for Transform.rotate's origin property to clarify its interaction with the alignment property. It emphasizes that the origin offset is applied after the alignment transformation, and provides examples to avoid common misinterpretations.
@github-actions github-actions bot added the framework flutter/packages/flutter repository. See also f: labels. label Feb 22, 2025
@justinmc
Copy link
Contributor

@SunkenInTime Heads up that there are failures. I'll try to take a look at this later, thanks for the PR!

@SunkenInTime
Copy link
Author

SunkenInTime commented Feb 26, 2025

@justinmc
Thanks for the heads up about the test failures. I've looked into it, but I'm still puzzled since my changes were limited to comments in the basic.dart file. The failing tests are Linux analyze, which seem unrelated to the documentation change. I've rebased against the latest flutter:master, but the failures persist. I'm not familiar with the analyzer or framework test setup, so I'm not sure where to start debugging. Would you (or someone else on the team) be able to take a look and offer some guidance on how to resolve these failures? I really appreciate you taking the time to look into this!

Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

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

Hey @SunkenInTime welcome! Thanks for contributing!

It looks like the failures are caused by your change, from the output:

 RUNNING: cd .; bin/cache/dart-sdk/bin/dart --enable-asserts /b/s/w/ir/x/w/flutter/dev/bots/analyze_snippet_code.dart --verbose
 workingDirectory: /b/s/w/ir/x/w/flutter, executable: /b/s/w/ir/x/w/flutter/bin/cache/dart-sdk/bin/dart, arguments: [--enable-asserts, /b/s/w/ir/x/w/flutter/dev/bots/analyze_snippet_code.dart, --verbose]
 packages/flutter/lib/src/widgets/basic.dart:1737:17: Use 'const' with the constructor to improve performance (expression) (prefer_const_constructors)
 packages/flutter/lib/src/widgets/basic.dart:1738:16: Abstract classes can't be instantiated (expression) (instantiate_abstract_class)
 packages/flutter/lib/src/widgets/basic.dart:1738:16: Use 'const' with the constructor to improve performance (expression) (prefer_const_constructors)
 packages/flutter/lib/src/widgets/basic.dart:1747:17: Use 'const' with the constructor to improve performance (expression) (prefer_const_constructors)
 packages/flutter/lib/src/widgets/basic.dart:1748:16: Abstract classes can't be instantiated (expression) (instantiate_abstract_class)
 packages/flutter/lib/src/widgets/basic.dart:1748:16: Use 'const' with the constructor to improve performance (expression) (prefer_const_constructors)
 Found 6 snippet code errors.

Can you update to resolve these?

@SunkenInTime
Copy link
Author

Hi @Piinks , thanks for the heads up! I didn't realize that it lints the code snippets 😭. I've made the changes to the affected lines. I would also like to know if the text widgets used there are appropriate. Thanks again!

Copy link
Contributor

@justinmc justinmc left a comment

Choose a reason for hiding this comment

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

Thanks for helping to make this nuance more clear for everyone. Just a bunch of suggestions about the wording, except for the part about double quotes, which I think is breaking the analyzer.

@SunkenInTime
Copy link
Author

@justinmc Apologies for taking so long, just made the proposed fixes to the commit! Thanks for the guidance 😊

Copy link
Contributor

@justinmc justinmc left a comment

Choose a reason for hiding this comment

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

Looks like the analyzer is still failing, can you take a look?

@flutter-dashboard
Copy link

Golden file changes have been found for this pull request. Click here to view and triage (e.g. because this is an intentional change).

If you are still iterating on this change and are not ready to resolve the images on the Flutter Gold dashboard, consider marking this PR as a draft pull request above. You will still be able to view image results on the dashboard, commenting will be silenced, and the check will not try to resolve itself until marked ready for review.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #163934 at sha 80c7ed2

@flutter-dashboard flutter-dashboard bot added the will affect goldens Changes to golden files label Apr 4, 2025
@SunkenInTime
Copy link
Author

I believe I've fixed all errors @justinmc 😊

Copy link
Contributor

@justinmc justinmc left a comment

Choose a reason for hiding this comment

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

I'm trying to understand your example to make sure it's the best example we can come up with for this. Sorry for the delay here. The checks are all passing at least.

@justinmc
Copy link
Contributor

@SunkenInTime Are you still available to follow up on this PR? Sorry for the slow responses here.

@SunkenInTime
Copy link
Author

Yes, I’m still available to follow up on this PR. No worries about the delay!

@justinmc
Sorry, can you explain these two examples? Maybe give me a full runnable code sample. In this example with alignment and origin it's kind of hard to understand what exactly you want to happen and what "correct" is.

The main issue is that the interaction between origin and alignment in Transform.rotate is inconsistent with how offsets typically work in Flutter. In Flutter’s coordinate system, the point (0, 0) is at the top-left of the widget. However, Transform.rotate defaults its alignment to Alignment.center, which shifts the coordinate origin to the center of the widget.

What makes this even more confusing is that alignment does not have to be explicitly defined—if you don’t specify it, it silently defaults to the center. This can make it difficult to realize that alignment is affecting the transformation, especially when you’re trying to use origin to control the rotation point. As a result, the behavior may not match what you’d expect if you’re following typical Flutter coordinate conventions.

To illustrate this, I’ve created a DartPad example that demonstrates the issue. Please take a look for more clarity.

@SunkenInTime
Copy link
Author

Hi @justinmc, just checking in on the status of this PR when you have a chance. Please let me know if there’s anything I can do to help move it forward. Thanks!

@Piinks Piinks requested a review from justinmc June 18, 2025 18:48
Copy link
Contributor

@justinmc justinmc left a comment

Choose a reason for hiding this comment

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

@SunkenInTime Sorry for losing track of this PR. Feel free to ping me on the Flutter Discord if it happens again.

Thank you for the dartpad and the clear explanation. I see how this is confusing and I agree that we should mention alignment in the origin docs.

Take a look at my rewrite below and let me know what you think. It doesn't explicitly use alignment in the examples, would you prefer that it did?

@SunkenInTime
Copy link
Author

Hi @justinmc , no worries at all!

I think your rewrite is great and it maintains brevity, which is awesome. The only issue I have is with this section:

/// However in this example, the child is rotated about its bottom right
/// corner:

I changed it to:

/// However, in this example the `origin` offset is applied after the
/// `alignment`, so the child rotates about its bottom-right corner:

I realize my version might be a bit redundant, but I don’t think there’s any harm in being explicit about the behavior, especially since this part can be confusing. What do you think?

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. will affect goldens Changes to golden files
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants