解决 Flutter position widget infinity 报错

132 min read

问题

======== Exception caught by rendering library =====================================================
The following assertion was thrown during performLayout():
BoxConstraints forces an infinite width.

These invalid constraints were provided to RenderDecoratedBox's layout() function by the following function, which probably computed the invalid constraints in question:
  RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
The offending constraints were: BoxConstraints(w=Infinity, h=200.0)
The relevant error-causing widget was: 
  Container Container:file:///Users/pan/app_flutter/lib/page/my_page.dart:43:22
When the exception was thrown, this was the stack: 
#0      BoxConstraints.debugAssertIsValid.<anonymous closure>.throwError (package:flutter/src/rendering/box.dart:516:9)
#1      BoxConstraints.debugAssertIsValid.<anonymous closure> (package:flutter/src/rendering/box.dart:558:11)
#2      BoxConstraints.debugAssertIsValid (package:flutter/src/rendering/box.dart:564:6)
#3      RenderObject.layout (package:flutter/src/rendering/object.dart:1810:24)
#4      RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
#5      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#6      RenderStack.layoutPositionedChild (package:flutter/src/rendering/stack.dart:479:11)
#7      RenderStack.performLayout (package:flutter/src/rendering/stack.dart:592:30)
#8      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#9      RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
#10     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#11     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#12     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1003:7)
#13     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#14     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#15     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#18     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#19     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#20     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#21     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#22     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:552:43)
#23     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:579:12)
#24     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#25     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#26     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1003:7)
#27     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#28     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#29     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#30     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#31     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#33     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#34     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#35     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#36     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#38     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#39     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#40     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#41     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#42     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#43     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#44     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#45     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#46     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#47     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#48     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#49     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#50     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#51     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#52     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#53     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#54     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#55     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#56     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#58     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#60     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#62     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#64     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#66     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#68     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3462:13)
#69     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#71     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#72     _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:749:15)
#73     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#75     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#77     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#79     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#80     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#81     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#83     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#84     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#85     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#86     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#87     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#88     RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)
#89     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1757:7)
#90     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
#91     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:504:19)
#92     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:892:13)
#93     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:370:5)
#94     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15)
#95     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9)
#96     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:864:7)
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)
The following RenderObject was being processed when the exception was fired: RenderConstrainedBox#772b1 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...  parentData: top=160.0; offset=Offset(0.0, 160.0) (can use size)
...  constraints: BoxConstraints(unconstrained)
...  size: Size(411.4, 200.0)
...  additionalConstraints: BoxConstraints(w=Infinity, h=200.0)
RenderObject: RenderConstrainedBox#772b1 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
  parentData: top=160.0; offset=Offset(0.0, 160.0) (can use size)
  constraints: BoxConstraints(unconstrained)
  size: Size(411.4, 200.0)
  additionalConstraints: BoxConstraints(w=Infinity, h=200.0)
...  child: RenderDecoratedBox#47b34 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...    parentData: <none> (can use size)
...    constraints: BoxConstraints(w=411.4, h=200.0)
...    size: Size(411.4, 200.0)
...    decoration: BoxDecoration
...      color: Color(0xffffffff)
...      borderRadius: BorderRadius.circular(20.0)
...    configuration: ImageConfiguration(bundle: PlatformAssetBundle#cb8cb(), devicePixelRatio: 2.6, locale: en_US, textDirection: TextDirection.ltr, platform: android)
...    child: RenderPadding#580e3 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...      parentData: <none> (can use size)
...      constraints: BoxConstraints(w=411.4, h=200.0)
...      size: Size(411.4, 200.0)
...      padding: EdgeInsets(20.0, 10.0, 20.0, 10.0)
...      textDirection: ltr
...      child: RenderFlex#2dce7 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...        parentData: offset=Offset(20.0, 10.0) (can use size)
...        constraints: BoxConstraints(w=371.4, h=180.0)
...        size: Size(371.4, 180.0)
...        direction: vertical
...        mainAxisAlignment: start
...        mainAxisSize: max
...        crossAxisAlignment: center
...        verticalDirection: down
...        child 1: RenderSemanticsAnnotations#c40aa relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...          parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size)
...          constraints: BoxConstraints(0.0<=w<=371.4, 0.0<=h<=Infinity)
...          size: Size(371.4, 56.0)
...        child 2: RenderSemanticsAnnotations#97602 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...          parentData: offset=Offset(0.0, 56.0); flex=null; fit=null (can use size)
...          constraints: BoxConstraints(0.0<=w<=371.4, 0.0<=h<=Infinity)
...          size: Size(371.4, 56.0)
====================================================================================================

======== Exception caught by rendering library =====================================================
The following assertion was thrown during performLayout():
BoxConstraints forces an infinite width.

These invalid constraints were provided to RenderDecoratedBox's layout() function by the following function, which probably computed the invalid constraints in question:
  RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
The offending constraints were: BoxConstraints(w=Infinity, h=200.0)
The relevant error-causing widget was: 
  Container Container:file:///Users/pan/app_flutter/lib/page/my_page.dart:43:22
When the exception was thrown, this was the stack: 
#0      BoxConstraints.debugAssertIsValid.<anonymous closure>.throwError (package:flutter/src/rendering/box.dart:516:9)
#1      BoxConstraints.debugAssertIsValid.<anonymous closure> (package:flutter/src/rendering/box.dart:558:11)
#2      BoxConstraints.debugAssertIsValid (package:flutter/src/rendering/box.dart:564:6)
#3      RenderObject.layout (package:flutter/src/rendering/object.dart:1810:24)
#4      RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
#5      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#6      RenderStack.layoutPositionedChild (package:flutter/src/rendering/stack.dart:479:11)
#7      RenderStack.performLayout (package:flutter/src/rendering/stack.dart:592:30)
#8      RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#9      RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
#10     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#11     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#12     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1003:7)
#13     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#14     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#15     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#16     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#17     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#18     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#19     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#20     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#21     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#22     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:552:43)
#23     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:579:12)
#24     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#25     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#26     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1003:7)
#27     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#28     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#29     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#30     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#31     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#32     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#33     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#34     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#35     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#36     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#38     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#39     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#40     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#41     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#42     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#43     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#44     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#45     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#46     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#47     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#48     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#49     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#50     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#51     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#52     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#53     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#54     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#55     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#56     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#58     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#60     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#62     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#64     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#66     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#68     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3462:13)
#69     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#71     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#72     _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:749:15)
#73     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#75     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#76     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#77     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#79     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#80     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#81     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#82     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#83     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#84     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#85     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#86     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#87     RenderObject.layout (package:flutter/src/rendering/object.dart:1915:7)
#88     RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)
#89     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1757:7)
#90     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
#91     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:504:19)
#92     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:892:13)
#93     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:370:5)
#94     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15)
#95     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9)
#96     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:864:7)
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)
The following RenderObject was being processed when the exception was fired: RenderConstrainedBox#72cb8 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...  parentData: top=160.0; offset=Offset(0.0, 160.0) (can use size)
...  constraints: BoxConstraints(unconstrained)
...  size: Size(411.4, 200.0)
...  additionalConstraints: BoxConstraints(w=Infinity, h=200.0)
RenderObject: RenderConstrainedBox#72cb8 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
  parentData: top=160.0; offset=Offset(0.0, 160.0) (can use size)
  constraints: BoxConstraints(unconstrained)
  size: Size(411.4, 200.0)
  additionalConstraints: BoxConstraints(w=Infinity, h=200.0)
...  child: RenderDecoratedBox#950ed NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...    parentData: <none> (can use size)
...    constraints: BoxConstraints(w=411.4, h=200.0)
...    size: Size(411.4, 200.0)
...    decoration: BoxDecoration
...      color: Color(0xffffffff)
...      borderRadius: BorderRadius.circular(20.0)
...    configuration: ImageConfiguration(bundle: PlatformAssetBundle#cb8cb(), devicePixelRatio: 2.6, locale: en_US, textDirection: TextDirection.ltr, platform: android)
...    child: RenderPadding#90499 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...      parentData: <none> (can use size)
...      constraints: BoxConstraints(w=411.4, h=200.0)
...      size: Size(411.4, 200.0)
...      padding: EdgeInsets(20.0, 10.0, 20.0, 10.0)
...      textDirection: ltr
...      child: RenderFlex#bd16d NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...        parentData: offset=Offset(20.0, 10.0) (can use size)
...        constraints: BoxConstraints(w=371.4, h=180.0)
...        size: Size(371.4, 180.0)
...        direction: vertical
...        mainAxisAlignment: start
...        mainAxisSize: max
...        crossAxisAlignment: center
...        verticalDirection: down
...        child 1: RenderSemanticsAnnotations#82cf6 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...          parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size)
...          constraints: BoxConstraints(0.0<=w<=371.4, 0.0<=h<=Infinity)
...          size: Size(371.4, 56.0)
...        child 2: RenderSemanticsAnnotations#18e79 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
...          parentData: offset=Offset(0.0, 56.0); flex=null; fit=null (can use size)
...          constraints: BoxConstraints(0.0<=w<=371.4, 0.0<=h<=Infinity)
...          size: Size(371.4, 56.0)
====================================================================================================

解决

Positioned必须限制宽度,不可设置为double.infinity之类的,否则报错;

当父小组件有一个无限的容器,而子小组件有无限的宽度或高度时,这个错误就会发生。

width: MediaQuery.of(context).size.width	

或者

Positioned(
    top:30,
    left:20, //set left 0, to start without margin at left
    right:30, //set right 0 to end without margin at right
    bottom:100,
    child: Container( 
      color: Colors.red,
    ),
)

延伸一 Row 的 BoxConstraints forces an infinite width

Row(
  children:[
      Container(
        width: double.infinity,
      )
  ]
) //Error: BoxConstraints forces an infinite width.

解决

Row(
  children:[
      Expanded(
        child:Container(
            width: double.infinity,
        )
      )
  ]
)

延伸二 约束类的容器组件有哪些

  • ConstrainedBox:适用于需要设置最大/小宽高,组件大小以来子组件大小,但不能超过设置的界限。
  • UnconstrainedBox:用到情况不多,当作ConstrainedBox的子组件可以“突破”ConstrainedBox的限制,超出界限的部分会被截取。
  • SizedBox:适用于固定宽高的情况,常用于当作2个组件之间间隙组件。
  • AspectRatio:适用于固定宽高比的情况。
  • FractionallySizedBox:适用于占父组件百分比的情况。
  • LimitedBox:适用于没有父组件约束的情况。
  • Container:适用于不仅有尺寸的约束,还有装饰(颜色、边框、等)、内外边距等需求的情况。