【flutter 入門】Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible child


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。
View Code
 
* 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.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM