Constrain width/hight when asking child for intrinsics (#71880)

This commit is contained in:
Michael Goderbauer
2020-12-09 14:42:19 -08:00
committed by GitHub
parent 53119af105
commit ceca634e98
2 changed files with 23 additions and 4 deletions

View File

@@ -234,7 +234,7 @@ class RenderConstrainedBox extends RenderProxyBox {
double computeMinIntrinsicWidth(double height) {
if (_additionalConstraints.hasBoundedWidth && _additionalConstraints.hasTightWidth)
return _additionalConstraints.minWidth;
final double width = super.computeMinIntrinsicWidth(height);
final double width = super.computeMinIntrinsicWidth(_additionalConstraints.constrainHeight(height));
assert(width.isFinite);
if (!_additionalConstraints.hasInfiniteWidth)
return _additionalConstraints.constrainWidth(width);
@@ -245,7 +245,7 @@ class RenderConstrainedBox extends RenderProxyBox {
double computeMaxIntrinsicWidth(double height) {
if (_additionalConstraints.hasBoundedWidth && _additionalConstraints.hasTightWidth)
return _additionalConstraints.minWidth;
final double width = super.computeMaxIntrinsicWidth(height);
final double width = super.computeMaxIntrinsicWidth(_additionalConstraints.constrainHeight(height));
assert(width.isFinite);
if (!_additionalConstraints.hasInfiniteWidth)
return _additionalConstraints.constrainWidth(width);
@@ -256,7 +256,7 @@ class RenderConstrainedBox extends RenderProxyBox {
double computeMinIntrinsicHeight(double width) {
if (_additionalConstraints.hasBoundedHeight && _additionalConstraints.hasTightHeight)
return _additionalConstraints.minHeight;
final double height = super.computeMinIntrinsicHeight(width);
final double height = super.computeMinIntrinsicHeight(_additionalConstraints.constrainWidth(width));
assert(height.isFinite);
if (!_additionalConstraints.hasInfiniteHeight)
return _additionalConstraints.constrainHeight(height);
@@ -267,7 +267,7 @@ class RenderConstrainedBox extends RenderProxyBox {
double computeMaxIntrinsicHeight(double width) {
if (_additionalConstraints.hasBoundedHeight && _additionalConstraints.hasTightHeight)
return _additionalConstraints.minHeight;
final double height = super.computeMaxIntrinsicHeight(width);
final double height = super.computeMaxIntrinsicHeight(_additionalConstraints.constrainWidth(width));
assert(height.isFinite);
if (!_additionalConstraints.hasInfiniteHeight)
return _additionalConstraints.constrainHeight(height);

View File

@@ -190,4 +190,23 @@ void main() {
);
expect(patient.currentContext!.size, equals(const Size(0.0, 0.0)));
});
testWidgets('SizedBox constrains intrinsics', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/27293.
await tester.pumpWidget(
const Directionality(
textDirection: TextDirection.ltr,
child: Center(
child: IntrinsicHeight(
child: SizedBox(
width: 100,
child: Text('This is a multi-line text.', style: TextStyle(height: 1.0, fontSize: 16)),
),
),
),
),
);
expect(tester.getSize(find.text('This is a multi-line text.')).height, greaterThan(16));
});
}