Flexible,Expanded
先参考一遍错误解决。
https://blog.csdn.net/m0_37828249/article/details/104121933
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
讲道理这段阅读理解已经告诉我们问题所在以及如何解决了,不放心可以配合一点源码阅读:在Flutter中可滚动组件的高度是无限(infinte)的,如源码所说:“provides its children with an infinite amount of space.”。这点特性和一些尽可能撑满可用空间的组件如Expanded互斥(Expand在flex布局中用以自动撑满剩下所有空间,其fit属性默认为FlexFit.tight)——因为在可滚动组件中使用Expanded时,Expanded可被分配的空间是无限的,无法渲染,于是抛错。
解决方式也是阅读理解后稍稍发散,不用Expanded这类fit属性为FlexFit.tight的组件就ok了,可以像提示所说的用Flexible代替Expanded(它的fit属性默认为fit属性默认为FlexFit.loose,呈现包裹性,刚好包裹子元素且不会超过最大可用宽(高)度),同时要注意,父Flex类型元素的mainAxisSize一定要设为MainAxisSize.min,否则也会报错,原理也是和上卖弄一样的可用空间无限问题。总结一下,其实垂直可滚动组件中,Column内部不可以也没必要使用任何none-zero的flex元素,所有chidren都用Container即可,如果强迫症也请使用Flexible,而非Expanded。
* Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力,但是不强制子组件填充可用空间。
* Expanded组件可以使Row、Column、Flex等子组件在其主轴方向上展开并填充可用空间,是强制子组件填充可用空间。
作者:习惯了_就好
链接:https://www.jianshu.com/p/d07d811a7d68
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Flexible是一个控制Row、Column、Flex等子组件如何布局的组件。
Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力(例如,Row在水平方向,Column在垂直方向),但是它与Expanded组件不同,它不强制子组件填充可用空间。
Flexible组件必须是Row、Column、Flex等组件的后裔,并且从Flexible到它封装的Row、Column、Flex的路径必须只包括StatelessWidgets或StatefulWidgets组件(不能是其他类型的组件,像RenderObjectWidgets)。
直观理解
总结,两控年是对Row、Column、Flex 布局的处理。子控件占多少地方。
比例嵌套ListView GridView.