SizedBox.shrink() 實現 Null Widget
SizedBox.shrink()
可模擬 Null Widget,使得 mainAxisAlignment
的設定生效。
失くすものさえない今が強くなるチャンスよ
SizedBox.shrink()
可模擬 Null Widget,使得 mainAxisAlignment
的設定生效。
為了讓使用者更容易點擊,實務上會讓整列都能被點擊,必須使用 GestureDector
、Container
、Row
三層 widget 所包裝。
要實現 ListView
動態 filter,ListView
可直接綁 Getter
,當 Keyword 改變時自動觸發 Getter
。
要實現 ListView
動態 filter,ListView
可綁定另外一個 filter 的 List
,並在 TextField
的 onChanged
event 及時改變要 filter 的 Keyword。
TextField
可實現驗證碼輸入,包括顯示 數字鍵盤
,與一次只能輸入 一個數字
。本範例使用 FocusNode
。
TextField
可實現驗證碼輸入,包括顯示 數字鍵盤
,與一次只能輸入 一個數字
。本範例使用 FocusTraversalGroup
。
若不使用 TextFormField
的 validator
,其實可使用 TextField
,既可使用 Data Binding,又不需要 TextEditingController
,程式碼更為精簡。
為了避免 Pixel Overflow,實務上會在 body 使用 SingleChildScrollView
,但這會導致 ListView
無法顯示。
ListView
一般都會搭配 ListTile
,但 ListTile
自帶 Padding,且無法清除,最有效的方式是使用沒有自帶 Padding 的 GestureDetector
取代 ListTile
。
ListView
適合顯示垂直清單,且支援卷軸。
為了避免 Pixel Overflow,實務上會在 body 使用 SingleChildScrollView
,但這會導致 GridView
無法顯示。
Column
預設會佔據整個高度,這使得外層的 Widget
如 Center
會失去功能,可使用 mainAxisSize: MainAxisSize.min
將 Column
縮小成 最小高度
。
當使用 Navigator.push()
跳轉到其他頁面時,可順便傳遞資料。
Navigator.push()
可直接跳轉到指定頁面。
Timer
可指定時間觸發,可藉此實現倒數計時。
GridView
適合顯示水平清單,且自動根據目前寬度換行。
GridView
適合顯示水平清單,且自動根據目前寬度換行。
當 Positioned
的座標為 負值
時,常會搭配 clipBehavior: Clip.none
讓 Widget 顯示在 Container
之上。
一般的切版會以 Padding
, Row
, Column
達成,而特殊的切版則會以 Positioned
實現。
Row
可將 Widget 水平排列
。
Column
可將 Widget 垂直排列
。
要將 Widget 同時水平向左右兩側對齊是常見需求,可使用 Spacer
實現。
當使用者字型將字型放大後,可能造成跑版,可藉由 MediaQuery 取得字型放大倍率後,做相對應的處理。
雖然可以直接使用 flutter upgrade
更新 Fluttter SDK 版本,但這樣升級將無法降級 Flutter 版本測試,比較好的方式是手動下載 Flutter SDK,並手動設定 Flutter SDK 路徑,並手動調整 Dart 在 Android Studio 的路徑。
crypto
可將 String 以 SHA256 編碼。
http
可呼叫 POST REST API 以 Future
形式回傳。
Flutter 為了加速開發,提供了 Hot Reload、Hot Restart 與 Full Restart 三種模式,各有各的使用時機及場景。
http
可呼叫 GET REST API 以 Future
形式回傳。
簡單的 TabBar
可使用 DefaultTabController
實現,若要完全控制 TabBar
,則可使用進階的 TabController
。
預設 TabBar
並沒有 Icon,可在 Tab
內使用 Row
組合 Icon
與 Text
實現。
除了使用 Android 與 iOS 的預設字型外,亦可使用自行下載的字型。
Container
可替 Widget 添加 BoxShadow。
Container
可替 Widget 添加 Border。
NavigationBar
若要調整 Text Style,無法直接在 NavigationBar
調整,必須包在 NavigationBarTheme
內。
雖然 Flutter 是以 Dart 寫 UI 與 邏輯
,但我們依然可使用 MVC 架構將 UI 與 邏輯
分離,方便日後維護。
Pixel Overflow 是 Flutter 開發中常遇到的問題,透過由 MediaQuery
取得裝置長寬,可動態設定 Margin 避免 Pixel Overflow。
Pixel Overflow 是 Flutter 開發中常遇到的問題,透過由 MediaQuery
取得裝置長寬,可動態設定 Row
的 Gap 避免 Pixel Overflow。
Pixel Overflow 是 Flutter 開發中常遇到的問題,透過由 MediaQuery
取得裝置長寬,可動態設定 Column
的 Gap 避免 Pixel Overflow。
雖然理論上 Material Design 要使用內建的顏色變數,如 primary
、secondary
…,但實務上 Designer 可能並不使用這些變數,我們也可以在 Material Design 使用 Figma 的變數。
要水平使每個 Widget 等距,可使用 Row
的mainAxisAlignment: MainAxisAlignment.spaceBetween
實現。