flutter的進階之路之常用元件

praise發表於2019-08-29

1. 重要概念

一切皆元件。flutter所有的元素都是由元件組成。比如一個佈局元素、一個動畫、一個裝飾效果等。

2. 容器元件

容器元件Container包含一個子widget,自身具備alignment、padding等屬性,方便佈局過程中擺放child。

常用屬性

屬性名 型別 說明
key key Container唯一識別符號,用於查詢更新
alignment AlignmentGeometry 控制child的對齊方式,如果Container或者Container的父節點尺寸大於child的尺寸,該屬性設定會起作用,有很多種對齊方式
padding EdgeInsetsGeometry Decoration內部的空白區,如果有child,child位於padding內部
color Color 用來設定Container背景色,如果foregroudDecoration設定的話,可能會覆蓋color效果
decoration Decoration 繪製在child後面的修飾,設定了Decoration的話,就不能設定color屬性,否則會報錯,此時應該在Decoration中進行顏色的設定
foregroundDecoration Decoration 繪製在child前面的裝飾
width double Container的寬度,設定為double.infinity可以強制在寬度上撐滿,不設定,則根據child和父節點兩者一起佈局
height double Container的高度,設定為double.infinity可以強制在高度上撐滿
constraints BoxConstraints 新增到child上額外的約束條件
margin EdgeInsetsGeometry 圍繞在Decoration和child之外的空白區域,不屬於內容區域
transform Matrix4 設定Container的變換矩陣,型別為Matrix4
child Widget Container中的內容Widget
  • padding與margin的不同之處:padding是包含在Content內,而margin是外部邊界。設定點選事件的話,padding區域會響應,而margin區域不會響應。

3. 圖片元件

圖片元件Image顯示影象的元件,有多種建構函式:

  • new Image:從ImageProvider獲取影象
  • new Image.asset:載入資源圖片
  • new Image.file:載入本地圖片檔案
  • new Image.network:載入網路圖片
  • new Image.memory:載入Uint8List資源圖片

常用屬性

屬性名 型別 說明
image ImageProvider 抽象類,需要自己實現獲取圖片資料的操作
width/height double Image顯示區域的寬度和高度設定,這裡需要把Image和圖片兩個區分開。圖片本身有大小,Image Widget是圖片的容器,本身也有大小。寬度和高度的配置經常和fitshu'x
fit BoxFit 圖片填充模式,具體取值見 BoxFit取值表
color Color 圖片顏色
colorBlendMode BlendMode 在對圖片進行手動處理的時候,可能用到圖層混合,如改變圖片顏色,此屬性可以對顏色進行混合處理,有多種模式
alignment Alignment 控制圖片的擺放位置,比如圖片放置在右下角則為Alignment.bottomRight
repeat ImageRepeat 此屬性可以設定圖片的重複模式。moRepeat為不重複,Repeat為x和y方向重複,repeatX為x方向重複,repeatY為y方向重複
centerSlice Rect 當圖片需要被拉伸顯示時,centerSlice定義的矩形區域會被拉伸,可以理解為我們在圖片內部定義9個點用作拉伸,9個點為"上","下","左","右","上中","下中","左中","右中","正中"
matchTextDirection bool matchTextDirection與Derection配合使用。TextDirectio有兩個值分別為:TextDirection.ltr從左到右展示圖片,TextDirection.rtl為從右到左展示圖片
gaplessPlayback bool 當ImageProvider發生變化後,重新載入圖片的過程中,原圖片的展示是否保留。值為true則保留,值為false則不保留,直接等待下一張圖片載入

BoxFit取值及描述

取值 描述
BoxFit.fill 全圖顯示,顯示可能拉伸,充滿
BoxFit.contain 全圖顯示,顯示原比例,不需充滿
BoxFit.cover 顯示可能拉伸,可能裁剪,充滿
BoxFit.fitWidth 顯示可能拉伸,可能裁剪,寬度充滿
BoxFit.fitHeight 顯示可能拉伸,可能裁剪,高度充滿
BoxFit.none 原始大小
BoxFit.scaleDown 效果和BoxFit.contain差不多,但是該屬性不允許顯示超過原圖大小(可小不可大)

4. 文字元件

4.1 Text

文字元件Text負責顯示文字和定義顯示樣式。

常用屬性

屬性名 型別 預設值 說明
data String 資料為要顯示的文字
maxLines int 0 文字顯示的最大行數
style TextStyle null 文字樣式,可定義文字的字型大小、顏色、粗細等
textAlign TextAlign TextAlign.center 文字水平方向對齊方式,取值右center、end、justify、left、right、start、values
textDirection TextDirection TextDirection.ltr 有些文字書寫方向從左到右,如英語、中文,有些則是從右到左,比如烏爾都語。從左到右使用TextDirection.ltr,從右到左使用TextDirection.rtl
textScaleFactor double 1.0 字型縮放係數,比如設定為1.5,那麼字型會放大1.5倍
textSpan TextSpan null 文字塊,TextSpan裡可以包含文字內容及樣式

4.2 RichText

富文字元件RichText使用多個不同風格的widget顯示文字,要顯示的文字使用TextSpan物件樹來描述,每個物件都有一個用於該子樹的關聯樣式。文字可能多行,也可能顯示在同一行,取決於佈局約束。

常用屬性

屬性名 型別 預設值 說明
text TextSpan - 要顯示的的文字
textAlign TextAlign TextAlign.start 文字水平方向對齊方式,取值右center、end、justify、left、right、start、values
textDirection TextDirection TextDirection.ltr 有些文字書寫方向從左到右,如英語、中文,有些則是從右到左,比如烏爾都語。從左到右使用TextDirection.ltr,從右到左使用TextDirection.rtl
softWrap bool true 是否自動換行
overflow TextOverflow TextOverflow.clip 內容超出文字範圍處理方式,預設截斷處理
textScaleFactor double 1.0 文字縮放比例,預設100%比例顯示
maxLines int - 最大顯示行數

5. 圖示及按鈕元件

5.1 圖示元件

圖示元件Icon展示圖示的元件,該元件不可互動,要實現互動圖示,可以考慮使用IconButton元件。圖示相關元件有以下幾個:

  • IconButton:可互動的Icon
  • Icons:框架自帶Icon集合
  • IconTheme:Icon主題
  • ImageIcon:通過AssetImages或者其他圖片顯示Icon

常用屬性

屬性名 型別 預設值 說明
color Color null 圖示的顏色,例如Colors.green[500]
icon IconData null 展示的具體圖示,可使用Icons圖示列表中的任意一個圖示即可,如Icons.phone表示一個電話的圖示
style TextStyle null 文字樣式,可定義文字的字型大小、顏色、粗細等
size Double 24.0 圖示的大小,注意需要帶上小數位
textDirection TextDirection TextDirection.ltr Icon元件裡也可以新增文字內容。有些文字書寫的方向是從左到右,有些則是從右到左。從左到右使用TextDirection.ltr,從右到左使用TextDirection.rtl

5.2 圖示按鈕元件

圖示按鈕元件IconButton是基於Meterial Design風格的元件,可以響應按下的事件,並且按下時帶水波紋效果。如果它的onPressed回撥函式為null,那麼這個按鈕處於禁用狀態,並且不可按下。

常用屬性

屬性名 型別 預設值 說明
alignment AlignmentGeometry Alignment.center 定義IconButton的Icon對齊方式,預設為居中。Alignment可以設定x,y的偏移量
icon Widget null 展示的具體圖示,可以使用Icons圖示列表中任意一個圖示即可,如Icons.phone表示一個電話圖示
color Color null 圖示元件的顏色
disabledColor Color ThemeData.disabledColor 圖示元件禁用狀態的顏色,預設為主題裡的禁用顏色,也可以設定為其他顏色
iconSize double 24.0 圖示的大小,注意需要帶上小數點
onPressed VoidCallback null 當按鈕按下時會觸發此回撥事件
tooltip String "" 當按鈕長按下時的提示語句

5.3 凸起按鈕元件

凸起按鈕元件RaisedButton是Material Design中的button,一個凸起的材質矩形按鈕,它可以響應按下事件,並且按下時會帶一個觸控效果。

常用屬性

屬性名 型別 預設值 說明
color Color null 元件的顏色
disabledColor Color ThemeData.disabledColor 元件禁用狀態的顏色,預設為主題裡的禁用顏色,也可以設定為其他顏色
onPressed VoidCallback null 當按鈕按下時會觸發此回撥事件
child Widget - 按鈕的child通常為一個Text文字元件,用來顯示按鈕的文字
enable bool true 按鈕是否為禁用狀態

6. 列表控制元件

列表是最常見的需求。在Flutter中,用ListView來顯示列表項,支援垂直和水平方向展示,通過一個屬性我們就可以控制其方向,列表有以下幾類:

  • 水平的列表
  • 垂直的列表
  • 資料量非常大的列表
  • 矩陣式的列表

6.1 基礎列表元件

基礎列表元件為ListView元件。

常用屬性

屬性名 型別 預設值 說明
scrollDirection Axix Axis.vertical 列表的排列方向,Axis.vertical為垂直方向,是預設值,Axis.horizontal為水平方向
padding EdgInsetsGeometry - 列表內部的空白區域,如果有child,child位於padding內部
reverse bool false 元件排列方向
children List<Widget> - 列表元素,注意List元素全部為Widget型別

6.2 水平列表元件

水平列表元件即為水平方向排列的元件,列表內部元素以水平方向排列。把ListView元件的scrollDirection屬性設定為Axis.horizontal即可。

6.3 長列表元件

當列表的資料項非常多時,需要使用長列表,比如淘寶後臺訂單列表、手機通訊錄等,這些列表項資料很多。長列表也是使用ListView作為基礎元件,只不過需要新增一個列表項構造器itemBuilder。

7. 網格佈局元件

網格佈局元件GridView可以實現多行多列布局的應用場景。使用GridView建立網格列表有多種方式:

  • GridView.count:通過單行展示個數建立
  • GridView.extent:通過最大寬度建立

常用屬性

屬性名 型別 預設值 說明
scrollDirection Axix Axis.vertical 滾動的方向,Axis.vertical為垂直方向,是預設值,Axis.horizontal為水平方向
reverse bool false 預設是從上或者左,向下或者右滾動的,這個屬性控制是否反向,預設值為false
controller ScrollController - 控制child滾動時的位置
primary bool - 是否是父節點的PrimaryScrollController所關聯的主滾動檢視
phisics ScrollPhysics - 滾動的檢視如何響應使用者的輸入
shrinkWrap bool false 滾動方向的滾動檢視內容是否應該由正在檢視的內容所決定
padding EdgInsetsGeometry - 四周的空白區域
gridDelegate SliverGridDelegate - 控制GridView中子節點佈局的delegate
cacheExtent double - 快取區域

8. 表單元件

表單是一個包含表單元素的區域。表單元素允許使用者輸入內容,比如文字域,下拉選單,單選框,核取方塊等。常見應用場景有:登入、註冊、輸入資訊等。表單裡有兩個重要的元件,一個是Form元件,用來左整個表單提交使用的;另一個是TextFormField元件,用來做使用者輸入的。

Form元件常用屬性

屬性名 型別 說明
key Key 元件在整個Widget樹中的key值
autovalidate bool 是否自動提交表單
child Widget 元件child只能有一個子元件
onChanged VoidCallback 當FormField值改變時的回撥函式

TextFormField元件常用屬性

屬性名 型別 說明
autovalidate bool 自動驗證值
initialValue T 表單欄位初始值
onSaved FormFieldSetter<T> 當Form表單呼叫儲存方法Save時,回撥的函式
validator FormFieldValidate<T> Form表單驗證器

相關文章