flutter中彈性布局

彈性布局

彈性布局是一種允許子widget按照一定比例來分配父容器空間的布局方式,如果你知道了它的主軸方向,那就可以用Row或Column了,一般情況下,可以用Flex的地方都可以用Row或者Column一起使用,通常配合Expanded Widget來使用,同樣Expanded也不能脫離Flex單獨創(chuàng)建。

Expanded

Expanded繼承自Flexible,F(xiàn)lexible是一個控制Row、Column、Flex等子組件如何布局的組件,它可以按比例“擴伸”Row、Column和Flex子widget所占用的空間。

const Expanded({
  int flex = 1, 
  @required Widget child,
})

flex為彈性系數(shù),如果為0或null,則child是沒有彈性的,即不會被擴伸占用的空間。如果大于0,所有的Expanded按照其flex的比例來分割主軸的全部空閑空間。

示例代碼
 Row(children: <Widget>[
        RaisedButton(
          onPressed: () {
            print('點擊紅色按鈕事件');
          },
          color: Colors.red,
          child: Text('紅色按鈕'),
        ),
        Expanded(
          flex: 1,
          child: RaisedButton(
            onPressed: () {
              print('點擊黃色按鈕事件');
            },
            color: Colors.yellow,
            child: Text('黃色按鈕'),
          ),
        ),
        RaisedButton(
          onPressed: () {
            print('點擊粉色按鈕事件');
          },
          color: Colors.green,
          child: Text('綠色按鈕'),
        ),
      ])

代碼運行效果
Flexible和 Expanded的區(qū)別
  • Flexible組件必須是Row、Column、Flex等組件的后裔,并且從Flexible到它封裝的Row、Column、Flex的路徑必須只包括StatelessWidgets或StatefulWidgets組件(不能是其他類型的組件,像RenderObjectWidgets)
  • Row、Column、Flex會被Expanded撐開,充滿主軸可用空間,而Flexible不強制子組件填充可用空間,這是因為fit屬性的值不同,該屬性在Expanded中為FlexFit.tight,F(xiàn)lexible為FlexFit.loose,區(qū)別在于tight表示強制使子控件填充剩余可用空間,loose表示最多填滿其在父控件所設(shè)置的比例,所以loose默認即為控件的大小
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容