Skip to content
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

Make FittedBox not throw when child has zero size. #150430

Merged
merged 11 commits into from
Jul 8, 2024

Conversation

PurplePolyhedron
Copy link
Contributor

@PurplePolyhedron PurplePolyhedron commented Jun 18, 2024

fix #135082 , fix #139539 , fix #142910

Before, FittedBox would throw when child size is zero, unless the constraint is tight and fit is not BoxFit.scaleDown.

Pre-launch Checklist

@github-actions github-actions bot added the framework flutter/packages/flutter repository. See also f: labels. label Jun 18, 2024
@goderbauer goderbauer self-requested a review June 18, 2024 22:02
Copy link
Member

@goderbauer goderbauer left a comment

Choose a reason for hiding this comment

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

Thank you for the fix and sorry for the delay in reviewing it.

case BoxFit.none:
size = constraints.constrainSizeAndAttemptToPreserveAspectRatio(child!.size);
if (child!.size.isEmpty) {
size = constraints.biggest;
Copy link
Member

Choose a reason for hiding this comment

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

Our default is usually constraints.smallest for these cases (see also the else branch bellow). Was there a good reason to use biggest here? Or should this also be smallest?

Copy link
Contributor Author

@PurplePolyhedron PurplePolyhedron Jul 3, 2024

Choose a reason for hiding this comment

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

My bad, it should be constraints.smallest there. I made some mistakes in previous testing and thought the default behaviour of FittedBox is constraints.biggest.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've changed it to smallest. And I updated computeDryLayout to match performLayout since I forgot about computeDryLayout perviously.

change fitted box default size to constraint.smallest and match computeDryLayout to performLayout
Copy link
Member

@goderbauer goderbauer left a comment

Choose a reason for hiding this comment

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

LGTM!

case BoxFit.none:
size = constraints.constrainSizeAndAttemptToPreserveAspectRatio(child!.size);
if (child!.size.isEmpty) {
size = constraints.smallest;
Copy link
Contributor

Choose a reason for hiding this comment

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

The assertion was in BoxConstraints.constrainSizeAndAttemptToPreserveAspectRatio. I think we should try to fix that method so it can handle an empty size as input?

Copy link
Contributor Author

@PurplePolyhedron PurplePolyhedron Jul 4, 2024

Choose a reason for hiding this comment

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

I am not sure how it should behave when only one side of the target size is 0. For example if height is finite while width is 0, Do you think BoxConstraints.constrainSizeAndAttemptToPreserveAspectRatio should trying to match the height(only constrain size and ignored the aspect ratio), or return constraints.smallest regardless(treat any zero size as empty)?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah I think in your example the method should return constrainSize(inputSize), instead of returning smallest and ignoring the input size.

The reason for that is I think returning smallest when the child size is empty feels like a special case, one that feels a bit artificial (if we do that then the documentation needs to be updated).
Say the input BoxConstraints is loose and unbounded (i.e., BoxConstraints()), then RenderFittedBox always takes the same size as its child when the child size is not empty, so ideally we don't have the special case it when the child size is empty, and always return the child size regardless if it's empty.

@LongCatIsLooong
Copy link
Contributor

@goderbauer would you like to take another look and see if the updated version makes sense to you?

Copy link
Member

@goderbauer goderbauer left a comment

Choose a reason for hiding this comment

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

Still LGTM

Copy link
Contributor

@LongCatIsLooong LongCatIsLooong left a comment

Choose a reason for hiding this comment

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

Thank you for contributing!

@LongCatIsLooong LongCatIsLooong added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 8, 2024
@auto-submit auto-submit bot merged commit f194cd3 into flutter:master Jul 8, 2024
73 checks passed
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 9, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 9, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 9, 2024
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Jul 9, 2024
flutter/flutter@fafd67d...5103d75

2024-07-09 [email protected] [tool] Remove some usages of deprecated usage package (flutter/flutter#151359)
2024-07-09 43759233 [email protected] Write the package config location to the test bootstrap. (flutter/flutter#150440)
2024-07-09 [email protected] [deps] Roll dart-lang/native packages (flutter/flutter#151403)
2024-07-08 [email protected] [tool] make `testUsingContext` provide a `Stdio` (with `hasTerminal` unset) override by default (flutter/flutter#151357)
2024-07-08 120297255 [email protected] Make `FittedBox` not throw when child has zero size. (flutter/flutter#150430)
2024-07-08 [email protected] Update `DataTable` documentation (flutter/flutter#151356)
2024-07-08 [email protected] `MaterialState` â�� `WidgetState` in documentation (flutter/flutter#151376)
2024-07-08 41930132 [email protected] [ios]A typical news app benchmark with bottom ad banner (flutter/flutter#150991)
2024-07-08 [email protected] Re-enable `SemanticsAction.focus` matchers (flutter/flutter#150990)
2024-07-08 [email protected] Added SliverFloatingHeader.snapMode (flutter/flutter#151289)
2024-07-08 [email protected] Factor out deprecated names in example code (flutter/flutter#151374)
2024-07-08 [email protected] Add cedric vanden bosch to authors (flutter/flutter#151313)
2024-07-08 [email protected] Roll Packages from 97bad7e to 14341d1 (5 revisions) (flutter/flutter#151417)
2024-07-08 [email protected] Update doc-import to primary configured import, _goldens_io.dart (flutter/flutter#151390)
2024-07-08 [email protected] [Reland] - Enable `explicitChildNodes` for the `AlertDialog` content (flutter/flutter#149597)
2024-07-08 32538273 [email protected] Add tests for material_state_border_side.0_test.dart (flutter/flutter#151089)
2024-07-08 [email protected] Roll Flutter Engine from ca79a56a66d7 to 69075e7e87d4 (1 revision) (flutter/flutter#151393)
2024-07-08 32538273 [email protected] Add tests for action_listener.0.dart (flutter/flutter#150606)
2024-07-07 [email protected] Roll Flutter Engine from 5ca3b856ee5a to ca79a56a66d7 (1 revision) (flutter/flutter#151387)
2024-07-06 [email protected] Roll Flutter Engine from 3600ec613a00 to 5ca3b856ee5a (1 revision) (flutter/flutter#151378)
2024-07-06 [email protected] Roll Flutter Engine from d1ebc5fde630 to 3600ec613a00 (1 revision) (flutter/flutter#151377)
2024-07-06 [email protected] Roll Flutter Engine from e6b09697df1a to d1ebc5fde630 (1 revision) (flutter/flutter#151362)
2024-07-05 49699333 dependabot[bot]@users.noreply.github.com Bump actions/upload-artifact from 4.3.3 to 4.3.4 (flutter/flutter#151354)
2024-07-05 [email protected] Roll Flutter Engine from 4ee09d3b7f3b to e6b09697df1a (2 revisions) (flutter/flutter#151352)
2024-07-05 [email protected] Add tests for color_filtered.0.dart example. (flutter/flutter#151064)
2024-07-05 [email protected] de-duplicate code in analyze.dart (flutter/flutter#151279)
2024-07-05 [email protected] Roll Packages from 754de19 to 97bad7e (1 revision) (flutter/flutter#151350)

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
Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autosubmit Merge PR when tree becomes green via auto submit App framework flutter/packages/flutter repository. See also f: labels.
Projects
None yet
3 participants