不論是網頁還是App整體設計風格都會有統一配色和文字樣式,在Flutter中,我們可以自行定義一套專屬於你的App外觀主題Theme,更方便的讓App風格一致化。
Theme有分成全域和區域:
MaterialApp
裡定義它,如果沒有設定則會遵照Flutter預設值。MaterialApp( //全域Theme
theme: ThemeData(
primaryColor: Colors.lightBlue[800],
fontFamily: 'Montserrat',
textTheme: TextTheme(
headline: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold),
...
),
)
)
你一定會好奇是所有的樣式都可以自定義嗎?ThemeData有規定哪些樣式是可以讓開發者自行定義的,例如:accentColor、backgroundColor、brightness、errorColor......在這邊都有明確列出來。
接著我們要使用剛剛定義好的Theme
:
Theme.of(context).[theme_name]
Theme.of(context).accentColor //舉例
Theme.of(context)
會從widget tree最接近的theme開始查找(從父層往外找),如果找不到就會回到預設的全域Theme設定。
今天的結論就是:善用Theme控管你的App樣式,就像用Sass寫變數一樣,減少我們key錯色碼的機率。原本設計稿上是用亮橘色,但色碼不小心打錯,就變成另一個深橘色,設計師會討厭你的。
想參考Theme的程式碼可以看這裡