布局组件和容器组件
容器类Widget和布局类Widget都作用于其子Widget,不同的是:
- 布局类Widget一般都需要接收一个widget数组(children),他们直接或间接继承自(或包含)MultiChildRenderObjectWidget ;而容器类Widget一般只需要接收一个子Widget(child),他们直接或间接继承自(或包含)SingleChildRenderObjectWidget。
- 布局类Widget是按照一定的排列方式来对其子Widget进行排列;而容器类Widget一般只是包装其子Widget,对其添加一些修饰(补白或背景色等)、变换(旋转或剪裁等)、或限制(大小等)
BoxContraints机制
- minWidth maxWidth minHeight maxHeight
父组件使用 BoxConstraints 来约束子组件可以显示的最小/最大尺寸。如果 Container 的 width/height 不在 constraints 的范围内的时候,显示的尺寸会被强制计算成一个符合 constraints 要求的值,而不再使用 Container 初始化时设定的宽高。- 通俗点说子组件的 width/height是由父组件和自身一起决定的。子组件的width/height要设置在父组件的范围之内。
布局组件 Row Column
Row/Column 是准备用来做布局的,虽然它们也要遵守上面的 BoxContraints 机制,但是是 “不可见” 的,它们为 Container 设定的尺寸约束是宽松的
minWidth 0
maxWidth 屏幕宽度
minHeight 0
maxHeiight 无穷大
.
解决办法
使用 Row/Column 以后,Container 上配置的 width/height 属性落在了有效范围内,width/height 属性都生效了。