一些Widget会根据父级定义的约束来设置它们的大小。但是像ListView,Row或Column等Widget很难使其子Widget的大小保持平衡。
当一个Widget没有父级来限制它的大小时,要想给它一个默认的大小:可以使用LimitedBox ;
仅当LimitedBox的父级未约束大小时,LimitedBox才会为其子级提供默认大小。否则当父Widget约束大小时,LimitedBox无效。
Container(
height:300,
width:300,
child:LimitedBox(
maxHeight:150,
maxWidth:150,
child:Container(
color:Colors.green,
),
),
)
在上面的例子中,外部Widget已经为其子Widget设置约束,此时将其包装在LimitedBox中,不会执行任何操作。
当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中,并设置最大高度,然后就会正常的显示。