mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Improve asserts around BoxConstraints
Negative constraints never make sense, so catch those too. Make RenderObject.layout's isNormalized assert use the newer more fancy debug version of isNormalized.
This commit is contained in:
parent
96405fb42f
commit
3bd8bc3362
@ -39,6 +39,10 @@ class SectorConstraints extends Constraints {
|
||||
bool get isTight => minDeltaTheta >= maxDeltaTheta && minDeltaTheta >= maxDeltaTheta;
|
||||
|
||||
bool get isNormalized => minDeltaRadius <= maxDeltaRadius && minDeltaTheta <= maxDeltaTheta;
|
||||
bool get debugAssertIsNormalized {
|
||||
assert(isNormalized);
|
||||
return isNormalized;
|
||||
}
|
||||
}
|
||||
|
||||
class SectorDimensions {
|
||||
|
||||
@ -272,12 +272,21 @@ class BoxConstraints extends Constraints {
|
||||
/// normalized and have undefined behavior when they are not. In
|
||||
/// checked mode, many of these APIs will assert if the constraints
|
||||
/// are not normalized.
|
||||
bool get isNormalized => minWidth <= maxWidth && minHeight <= maxHeight;
|
||||
bool get isNormalized {
|
||||
return minWidth >= 0.0 &&
|
||||
minWidth <= maxWidth &&
|
||||
minHeight >= 0.0 &&
|
||||
minHeight <= maxHeight;
|
||||
}
|
||||
|
||||
/// Same as [isNormalized] but, in checked mode, throws an exception
|
||||
/// if isNormalized is false.
|
||||
bool get debugAssertIsNormalized {
|
||||
assert(() {
|
||||
if (minWidth < 0.0 && minHeight < 0.0)
|
||||
throw new RenderingError('BoxConstraints has both a negative minimum width and a negative minimum height.\n$this');
|
||||
if (minWidth < 0.0)
|
||||
throw new RenderingError('BoxConstraints has a negative minimum width.\n$this');
|
||||
if (minHeight < 0.0)
|
||||
throw new RenderingError('BoxConstraints has a negative minimum height.\n$this');
|
||||
if (maxWidth < minWidth && maxHeight < minHeight)
|
||||
throw new RenderingError('BoxConstraints has both width and height constraints non-normalized.\n$this');
|
||||
if (maxWidth < minWidth)
|
||||
|
||||
@ -353,6 +353,10 @@ abstract class Constraints {
|
||||
|
||||
/// Whether the constraint is expressed in a consistent manner.
|
||||
bool get isNormalized;
|
||||
|
||||
/// Same as [isNormalized] but, in checked mode, throws an exception
|
||||
/// if isNormalized is false.
|
||||
bool get debugAssertIsNormalized;
|
||||
}
|
||||
|
||||
typedef void RenderObjectVisitor(RenderObject child);
|
||||
@ -975,7 +979,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
|
||||
/// implemented here) to return early if the child does not need to do any
|
||||
/// work to update its layout information.
|
||||
void layout(Constraints constraints, { bool parentUsesSize: false }) {
|
||||
assert(constraints.isNormalized);
|
||||
assert(constraints.debugAssertIsNormalized);
|
||||
assert(!_debugDoingThisResize);
|
||||
assert(!_debugDoingThisLayout);
|
||||
final RenderObject parent = this.parent;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user