Flexible,Expanded
先參考一遍錯誤解決。
https://blog.csdn.net/m0_37828249/article/details/104121933
講道理這段閱讀理解已經告訴我們問題所在以及如何解決了,不放心可以配合一點源碼閱讀:在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.
