@@ -2253,11 +2253,11 @@ class _ConstraintRenderBox extends RenderBox
2253
2253
}
2254
2254
2255
2255
/// There should be no loop constraints
2256
- static void _debugCheckLoopConstraints (
2257
- List < _ConstrainedNode > nodeList, bool selfSizeConfirmed ) {
2256
+ static void _debugCheckLoopConstraints (List < _ConstrainedNode > nodeList,
2257
+ bool selfSizeConfirmed, double resolvedWidth, double resolvedHeight ) {
2258
2258
for (final element in nodeList) {
2259
2259
try {
2260
- element.getDepth (selfSizeConfirmed);
2260
+ element.getDepth (selfSizeConfirmed, resolvedWidth, resolvedHeight );
2261
2261
} on StackOverflowError catch (_) {
2262
2262
throw ConstraintLayoutException (
2263
2263
'There are some loop constraints, please check the code. For layout performance considerations, constraints are always one-way, and there should be no two child elements directly or indirectly restrain each other. Each constraint should describe exactly where the child elements are located. Use Guideline to break loop constraints.' );
@@ -2566,6 +2566,10 @@ class _ConstraintRenderBox extends RenderBox
2566
2566
if (resolvedWidth != wrapContent && resolvedHeight != wrapContent) {
2567
2567
size = Size (resolvedWidth, resolvedHeight);
2568
2568
selfSizeConfirmed = true ;
2569
+ } else if (resolvedWidth != wrapContent) {
2570
+ size = Size (resolvedWidth, constraints.minHeight);
2571
+ } else if (resolvedHeight != wrapContent) {
2572
+ size = Size (constraints.minWidth, resolvedHeight);
2569
2573
}
2570
2574
2571
2575
if (_needsRecalculateConstraints) {
@@ -2585,7 +2589,8 @@ class _ConstraintRenderBox extends RenderBox
2585
2589
if (_debugCheckConstraints) {
2586
2590
List <_ConstrainedNode > nodeList = nodesMap.values.toList ();
2587
2591
_debugCheckConstraintsIntegrity (nodeList);
2588
- _debugCheckLoopConstraints (nodeList, selfSizeConfirmed);
2592
+ _debugCheckLoopConstraints (
2593
+ nodeList, selfSizeConfirmed, resolvedWidth, resolvedHeight);
2589
2594
}
2590
2595
return true ;
2591
2596
}());
@@ -2596,8 +2601,8 @@ class _ConstraintRenderBox extends RenderBox
2596
2601
_layoutOrderList.add (parentNode! );
2597
2602
}
2598
2603
_layoutOrderList.sort ((left, right) {
2599
- return left.getDepth (selfSizeConfirmed) -
2600
- right.getDepth (selfSizeConfirmed);
2604
+ return left.getDepth (selfSizeConfirmed, resolvedWidth, resolvedHeight ) -
2605
+ right.getDepth (selfSizeConfirmed, resolvedWidth, resolvedHeight );
2601
2606
});
2602
2607
2603
2608
_paintingOrderList = nodesMap.values.toList ();
@@ -3504,7 +3509,8 @@ class _ConstraintRenderBox extends RenderBox
3504
3509
paragraphBuilder.pushStyle (ui.TextStyle (
3505
3510
color: Colors .black,
3506
3511
));
3507
- paragraphBuilder.addText ("depth ${element .getDepth (null )}" );
3512
+ paragraphBuilder
3513
+ .addText ("depth ${element .getDepth (null , null , null )}" );
3508
3514
ui.Paragraph paragraph = paragraphBuilder.build ();
3509
3515
paragraph.layout (ui.ParagraphConstraints (
3510
3516
width: element.getMeasuredWidth (),
@@ -3824,40 +3830,51 @@ class _ConstrainedNode {
3824
3830
return baseline;
3825
3831
}
3826
3832
3827
- int getDepthFor (
3828
- _ConstrainedNode ? constrainedNode, bool ? parentSizeConfirmed ) {
3833
+ int getDepthFor (_ConstrainedNode ? constrainedNode, bool ? parentSizeConfirmed,
3834
+ double ? resolvedWidth, double ? resolvedHeight ) {
3829
3835
if (constrainedNode == null ) {
3830
3836
return - 1 ;
3831
3837
}
3832
3838
if (parentSizeConfirmed == false ) {
3833
3839
if (constrainedNode.isParent ()) {
3834
3840
/// The width and height can be calculated directly without relying on parent
3835
- if ((width >= 0 || width == wrapContent) &&
3836
- (height >= 0 || height == wrapContent)) {
3841
+ if ((width >= 0 ||
3842
+ width == wrapContent ||
3843
+ (width == matchParent && resolvedWidth != wrapContent)) &&
3844
+ (height >= 0 ||
3845
+ height == wrapContent ||
3846
+ (height == matchParent && resolvedHeight != wrapContent))) {
3837
3847
return 0 ;
3838
3848
}
3839
3849
}
3840
3850
}
3841
- return constrainedNode.getDepth (parentSizeConfirmed);
3851
+ return constrainedNode.getDepth (
3852
+ parentSizeConfirmed, resolvedWidth, resolvedHeight);
3842
3853
}
3843
3854
3844
- int getDepth (bool ? parentSizeConfirmed) {
3855
+ int getDepth (bool ? parentSizeConfirmed, double ? resolvedWidth,
3856
+ double ? resolvedHeight) {
3845
3857
if (depth < 0 ) {
3846
3858
if (isBarrier) {
3847
3859
List <int > list = [];
3848
3860
for (final id in referencedIds! ) {
3849
3861
list.add (parentData._constrainedNodeMap[id]!
3850
- .getDepth (parentSizeConfirmed));
3862
+ .getDepth (parentSizeConfirmed, resolvedWidth, resolvedHeight ));
3851
3863
}
3852
3864
list.sort ((left, right) => left - right);
3853
3865
depth = list.last + 1 ;
3854
3866
} else {
3855
3867
List <int > list = [
3856
- getDepthFor (leftConstraint, parentSizeConfirmed),
3857
- getDepthFor (topConstraint, parentSizeConfirmed),
3858
- getDepthFor (rightConstraint, parentSizeConfirmed),
3859
- getDepthFor (bottomConstraint, parentSizeConfirmed),
3860
- getDepthFor (baselineConstraint, parentSizeConfirmed),
3868
+ getDepthFor (leftConstraint, parentSizeConfirmed, resolvedWidth,
3869
+ resolvedHeight),
3870
+ getDepthFor (topConstraint, parentSizeConfirmed, resolvedWidth,
3871
+ resolvedHeight),
3872
+ getDepthFor (rightConstraint, parentSizeConfirmed, resolvedWidth,
3873
+ resolvedHeight),
3874
+ getDepthFor (bottomConstraint, parentSizeConfirmed, resolvedWidth,
3875
+ resolvedHeight),
3876
+ getDepthFor (baselineConstraint, parentSizeConfirmed, resolvedWidth,
3877
+ resolvedHeight),
3861
3878
];
3862
3879
list.sort ((left, right) => left - right);
3863
3880
depth = list.last + 1 ;
@@ -3936,7 +3953,7 @@ class _ConstrainedNode {
3936
3953
}
3937
3954
}
3938
3955
}
3939
- map['depth' ] = getDepth (null );
3956
+ map['depth' ] = getDepth (null , null , null );
3940
3957
return map;
3941
3958
}
3942
3959
}
0 commit comments