一些Widget会根据父级定义的约束来设置它们的大小。但是ListView,Row或Column等Widget很难使其子项的大小保持平衡。
当一个Widget没有父级来限制它的大小时,要想给它一个默认的大小可以使用LimitedBox ;
仅当LimitedBox的父级未约束大小时,LimitedBox才会为其子级提供默认大小。当父Widget约束大小时,LimitedBox无效。
如下例子中,外部Widget已经为其子容器设置了大小约束,此时将其包装在LimitedBox中,将不会执行任何操作。
Container(
height:300,
width:300,
child:LimitedBox(
maxHeight:150,
maxWidth:150,
child:Container(
color:Colors.green,
),
),
)
当LimitedBox与ListView一起使用时,LimitedBox将发挥很大的作用:
ListView(
children:[
for(var i = 0;i<10;i++)
Container(
color:randomColor(),
),
],
)
当像上面这样设置时,ListView将不会显示任何东西。因为Container在不受约束时,会将其大小设置为0;
ListView(
children:[
for(var i = 0;i<10;i++)
LimitedBox(
maxHeight:200,
child:Container(
color:randomColor(),
),
),
],
)
如果将Container包裹在LimitedBox中,并设置最大高度,然后就会正常地显示。