ConstraintsTransformBox class Null safety

A container widget that applies an arbitrary transform to its constraints, and sizes its child using the resulting BoxConstraints, treating any overflow as error.

This container sizes its child using a BoxConstraints created by applying constraintsTransform to its own constraints. This container will then attempt to adopt the same size, within the limits of its own constraints. If it ends up with a different size, it will align the child based on alignment. If the container cannot expand enough to accommodate the entire child, the child will be clipped if clipBehavior is not Clip.none.

In debug mode, if the child overflows the container, a warning will be printed on the console, and black and yellow striped areas will appear where the overflow occurs.

When child is null, this widget becomes as small as possible and never overflows

This widget can be used to ensure some of child's natural dimensions are honored, and get an early warning otherwise during development. For instance, if child requires a minimum height to fully display its content, constraintsTransform can be set to maxHeightUnconstrained, so that if the parent RenderObject fails to provide enough vertical space, a warning will be displayed in debug mode, while still allowing child to grow vertically:

In the following snippet, the Card is guaranteed to be at least as tall as its "natural" height. Unlike UnconstrainedBox, it will become taller if its "natural" height is smaller than 40 px. If the Container isn't high enough to show the full content of the Card, in debug mode a warning will be given.
  constraints: const BoxConstraints(minHeight: 40, maxHeight: 100),
  child: const ConstraintsTransformBox(
    constraintsTransform: ConstraintsTransformBox.maxHeightUnconstrained,
    child: Card(child: Text('Hello World!')),

See also:

  • ConstrainedBox, which renders a box which imposes constraints on its child.
  • OverflowBox, a widget that imposes additional constraints on its child, and allows the child to overflow itself.
  • UnconstrainedBox which allows its children to render themselves unconstrained, expands to fit them, and considers overflow to be an error.


ConstraintsTransformBox({Key? key, Widget? child, TextDirection? textDirection, AlignmentGeometry alignment, required BoxConstraintsTransform constraintsTransform, Clip clipBehavior, String debugTransformType = ''})
Creates a widget that uses a function to transform the constraints it passes to its child. If the child overflows the parent's constraints, a warning will be given in debug mode. [...]


alignment AlignmentGeometry
The alignment to use when laying out the child, if it has a different size than this widget. [...]
child Widget?
The widget below this widget in the tree. [...]
final, inherited
clipBehavior Clip
The content will be clipped (or not) according to this option. [...]
constraintsTransform BoxConstraintsTransform
The function used to transform the incoming BoxConstraints, to size child. [...]
hashCode int
The hash code for this object. [...]
@nonVirtual, read-only, inherited
key Key?
Controls how one widget replaces another widget in the tree. [...]
final, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
textDirection TextDirection?
The text direction to use when interpreting the alignment if it is an AlignmentDirectional. [...]


createElement() SingleChildRenderObjectElement
RenderObjectWidgets always inflate to a RenderObjectElement subclass.
createRenderObject(BuildContext context) RenderConstraintsTransformBox
Creates an instance of the RenderObject class that this RenderObjectWidget represents, using the configuration described by this RenderObjectWidget. [...]
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children. [...]
@protected, inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node. [...]
didUnmountRenderObject(covariant RenderObject renderObject) → void
A render object previously associated with this widget has been removed from the tree. The given RenderObject will be of the same type as returned by this object's createRenderObject.
@protected, inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep. [...]
toString({DiagnosticLevel minLevel =}) String
A string representation of this object. [...]
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a string representation of this node and its descendants. [...]
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object. [...]
toStringShort() String
A short, textual description of this widget.
updateRenderObject(BuildContext context, covariant RenderConstraintsTransformBox renderObject) → void
Copies the configuration described by this RenderObjectWidget to the given RenderObject, which will be of the same type as returned by this object's createRenderObject. [...]


operator ==(Object other) bool
The equality operator. [...]
@nonVirtual, inherited

Static Methods

heightUnconstrained(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that removes the height constraints from the input. [...]
maxHeightUnconstrained(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that removes the maxHeight constraint from the input. [...]
maxUnconstrained(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that removes both the maxWidth and the maxHeight constraints from the input. [...]
maxWidthUnconstrained(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that removes the maxWidth constraint from the input. [...]
unconstrained(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that always returns a BoxConstraints that imposes no constraints on either dimension (i.e. const BoxConstraints()). [...]
unmodified(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that always returns its argument as-is (i.e., it is an identity function). [...]
widthUnconstrained(BoxConstraints constraints) BoxConstraints
A BoxConstraintsTransform that removes the width constraints from the input. [...]