Commit 6a323f6f authored by Ian Hickson's avatar Ian Hickson Committed by GitHub

Try to help people using intrinsic dimension methods more. (#5712)

parent f27fa0ec
...@@ -550,6 +550,25 @@ abstract class RenderBox extends RenderObject { ...@@ -550,6 +550,25 @@ abstract class RenderBox extends RenderObject {
/// Do not override this method. Instead, implement [computeMinIntrinsicWidth]. /// Do not override this method. Instead, implement [computeMinIntrinsicWidth].
@mustCallSuper @mustCallSuper
double getMinIntrinsicWidth(double height) { double getMinIntrinsicWidth(double height) {
assert(() {
if (height == null) {
throw new FlutterError(
'The height argument to getMinIntrinsicWidth was null.\n'
'The argument to getMinIntrinsicWidth must not be negative or null. '
'If you do not have a specific height in mind, then pass double.INFINITY instead.'
);
}
if (height < 0.0) {
throw new FlutterError(
'The height argument to getMinIntrinsicWidth was negative.\n'
'The argument to getMinIntrinsicWidth must not be negative or null. '
'If you perform computations on another height before passing it to '
'getMinIntrinsicWidth, consider using math.max() or double.clamp() '
'to force the value into the valid range.'
);
}
return true;
});
return _computeIntrinsicDimension(_IntrinsicDimension.minWidth, height, computeMinIntrinsicWidth); return _computeIntrinsicDimension(_IntrinsicDimension.minWidth, height, computeMinIntrinsicWidth);
} }
...@@ -570,6 +589,8 @@ abstract class RenderBox extends RenderObject { ...@@ -570,6 +589,8 @@ abstract class RenderBox extends RenderObject {
/// height-in-width-out when the width is unconstrained, then the height /// height-in-width-out when the width is unconstrained, then the height
/// argument is the height to use. /// argument is the height to use.
/// ///
/// The `height` argument will never be negative or null. It may be infinite.
///
/// If this algorithm depends on the intrinsic dimensions of a child, the /// If this algorithm depends on the intrinsic dimensions of a child, the
/// intrinsic dimensions of that child should be obtained using the functions /// intrinsic dimensions of that child should be obtained using the functions
/// whose names start with `get`, not `compute`. /// whose names start with `get`, not `compute`.
...@@ -640,6 +661,11 @@ abstract class RenderBox extends RenderObject { ...@@ -640,6 +661,11 @@ abstract class RenderBox extends RenderObject {
/// decreases the preferred height. The preferred height is the value that /// decreases the preferred height. The preferred height is the value that
/// would be returned by [getMinIntrinsicHeight] for that width. /// would be returned by [getMinIntrinsicHeight] for that width.
/// ///
/// The height argument may give a specific height to assume. The given height
/// can be infinite, meaning that the intrinsic width in an unconstrained
/// environment is being requested. The given height should never be negative
/// or null.
///
/// This function should only be called on one's children. Calling this /// This function should only be called on one's children. Calling this
/// function couples the child with the parent so that when the child's layout /// function couples the child with the parent so that when the child's layout
/// changes, the parent is notified (via [markNeedsLayout]). /// changes, the parent is notified (via [markNeedsLayout]).
...@@ -651,6 +677,25 @@ abstract class RenderBox extends RenderObject { ...@@ -651,6 +677,25 @@ abstract class RenderBox extends RenderObject {
/// [computeMaxIntrinsicWidth]. /// [computeMaxIntrinsicWidth].
@mustCallSuper @mustCallSuper
double getMaxIntrinsicWidth(double height) { double getMaxIntrinsicWidth(double height) {
assert(() {
if (height == null) {
throw new FlutterError(
'The height argument to getMaxIntrinsicWidth was null.\n'
'The argument to getMaxIntrinsicWidth must not be negative or null. '
'If you do not have a specific height in mind, then pass double.INFINITY instead.'
);
}
if (height < 0.0) {
throw new FlutterError(
'The height argument to getMaxIntrinsicWidth was negative.\n'
'The argument to getMaxIntrinsicWidth must not be negative or null. '
'If you perform computations on another height before passing it to '
'getMaxIntrinsicWidth, consider using math.max() or double.clamp() '
'to force the value into the valid range.'
);
}
return true;
});
return _computeIntrinsicDimension(_IntrinsicDimension.maxWidth, height, computeMaxIntrinsicWidth); return _computeIntrinsicDimension(_IntrinsicDimension.maxWidth, height, computeMaxIntrinsicWidth);
} }
...@@ -670,6 +715,8 @@ abstract class RenderBox extends RenderObject { ...@@ -670,6 +715,8 @@ abstract class RenderBox extends RenderObject {
/// should be equal to or bigger than the value returned by /// should be equal to or bigger than the value returned by
/// [computeMinIntrinsicWidth]. /// [computeMinIntrinsicWidth].
/// ///
/// The `height` argument will never be negative or null. It may be infinite.
///
/// The value returned by this method might not match the size that the object /// The value returned by this method might not match the size that the object
/// would actually take. For example, a [RenderBox] subclass that always /// would actually take. For example, a [RenderBox] subclass that always
/// exactly sizes itself using [BoxConstraints.biggest] might well size itself /// exactly sizes itself using [BoxConstraints.biggest] might well size itself
...@@ -706,6 +753,25 @@ abstract class RenderBox extends RenderObject { ...@@ -706,6 +753,25 @@ abstract class RenderBox extends RenderObject {
/// [computeMinIntrinsicHeight]. /// [computeMinIntrinsicHeight].
@mustCallSuper @mustCallSuper
double getMinIntrinsicHeight(double width) { double getMinIntrinsicHeight(double width) {
assert(() {
if (width == null) {
throw new FlutterError(
'The width argument to getMinIntrinsicHeight was null.\n'
'The argument to getMinIntrinsicHeight must not be negative or null. '
'If you do not have a specific width in mind, then pass double.INFINITY instead.'
);
}
if (width < 0.0) {
throw new FlutterError(
'The width argument to getMinIntrinsicHeight was negative.\n'
'The argument to getMinIntrinsicHeight must not be negative or null. '
'If you perform computations on another width before passing it to '
'getMinIntrinsicHeight, consider using math.max() or double.clamp() '
'to force the value into the valid range.'
);
}
return true;
});
return _computeIntrinsicDimension(_IntrinsicDimension.minHeight, width, computeMinIntrinsicHeight); return _computeIntrinsicDimension(_IntrinsicDimension.minHeight, width, computeMinIntrinsicHeight);
} }
...@@ -726,6 +792,8 @@ abstract class RenderBox extends RenderObject { ...@@ -726,6 +792,8 @@ abstract class RenderBox extends RenderObject {
/// width-in-height-out when the height is unconstrained, then the width /// width-in-height-out when the height is unconstrained, then the width
/// argument is the width to use. /// argument is the width to use.
/// ///
/// The `width` argument will never be negative or null. It may be infinite.
///
/// If this algorithm depends on the intrinsic dimensions of a child, the /// If this algorithm depends on the intrinsic dimensions of a child, the
/// intrinsic dimensions of that child should be obtained using the functions /// intrinsic dimensions of that child should be obtained using the functions
/// whose names start with `get`, not `compute`. /// whose names start with `get`, not `compute`.
...@@ -742,6 +810,11 @@ abstract class RenderBox extends RenderObject { ...@@ -742,6 +810,11 @@ abstract class RenderBox extends RenderObject {
/// decreases the preferred width. The preferred width is the value that /// decreases the preferred width. The preferred width is the value that
/// would be returned by [getMinIntrinsicWidth] for that height. /// would be returned by [getMinIntrinsicWidth] for that height.
/// ///
/// The width argument may give a specific width to assume. The given width
/// can be infinite, meaning that the intrinsic height in an unconstrained
/// environment is being requested. The given width should never be negative
/// or null.
///
/// This function should only be called on one's children. Calling this /// This function should only be called on one's children. Calling this
/// function couples the child with the parent so that when the child's layout /// function couples the child with the parent so that when the child's layout
/// changes, the parent is notified (via [markNeedsLayout]). /// changes, the parent is notified (via [markNeedsLayout]).
...@@ -753,6 +826,25 @@ abstract class RenderBox extends RenderObject { ...@@ -753,6 +826,25 @@ abstract class RenderBox extends RenderObject {
/// [computeMaxIntrinsicHeight]. /// [computeMaxIntrinsicHeight].
@mustCallSuper @mustCallSuper
double getMaxIntrinsicHeight(double width) { double getMaxIntrinsicHeight(double width) {
assert(() {
if (width == null) {
throw new FlutterError(
'The width argument to getMaxIntrinsicHeight was null.\n'
'The argument to getMaxIntrinsicHeight must not be negative or null. '
'If you do not have a specific width in mind, then pass double.INFINITY instead.'
);
}
if (width < 0.0) {
throw new FlutterError(
'The width argument to getMaxIntrinsicHeight was negative.\n'
'The argument to getMaxIntrinsicHeight must not be negative or null. '
'If you perform computations on another width before passing it to '
'getMaxIntrinsicHeight, consider using math.max() or double.clamp() '
'to force the value into the valid range.'
);
}
return true;
});
return _computeIntrinsicDimension(_IntrinsicDimension.maxHeight, width, computeMaxIntrinsicHeight); return _computeIntrinsicDimension(_IntrinsicDimension.maxHeight, width, computeMaxIntrinsicHeight);
} }
...@@ -772,6 +864,8 @@ abstract class RenderBox extends RenderObject { ...@@ -772,6 +864,8 @@ abstract class RenderBox extends RenderObject {
/// should be equal to or bigger than the value returned by /// should be equal to or bigger than the value returned by
/// [computeMinIntrinsicHeight]. /// [computeMinIntrinsicHeight].
/// ///
/// The `width` argument will never be negative or null. It may be infinite.
///
/// The value returned by this method might not match the size that the object /// The value returned by this method might not match the size that the object
/// would actually take. For example, a [RenderBox] subclass that always /// would actually take. For example, a [RenderBox] subclass that always
/// exactly sizes itself using [BoxConstraints.biggest] might well size itself /// exactly sizes itself using [BoxConstraints.biggest] might well size itself
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment