Flutter Widget(5):MaterialDesign風(fēng)格Widget

1. 概述

Material Design是由谷歌推出的全新設(shè)計(jì)語言,這種設(shè)計(jì)語言旨在為手機(jī)殷绍、平板電腦梗摇、臺(tái)式機(jī)和其他平臺(tái)提供更一致、更廣泛的外觀和感覺几缭。Material Design風(fēng)格是一直非常有質(zhì)感的設(shè)計(jì)風(fēng)格河泳,并會(huì)提供一些默認(rèn)的交互動(dòng)畫。

2. App結(jié)構(gòu)和導(dǎo)航組件

2.1 MaterialApp(應(yīng)用組件)

MaterialApp代表使用Material Design風(fēng)格的應(yīng)用奏司,里面包含了其他所需的基本控件乔询。官方提供的示例demo就是從MaterialApp這個(gè)主組件開始的樟插。

MaterialApp組件常見屬性

屬性名 類型 說明
title String 應(yīng)用程序的標(biāo)題韵洋。該標(biāo)題出現(xiàn)在以下位置:Android:任務(wù)管理器的程序快照上; IOS:程序切換管理器中
theme ThemeData 定義應(yīng)用所使用的主題顏色黄锤,可以指定主題中每個(gè)控件的顏色
color Color 應(yīng)用的主要顏色值搪缨,即primary color
home Widget 用來定義當(dāng)前應(yīng)用打開時(shí)所顯示的界面
routes Map<String, WidgetBuilder> 定義應(yīng)用中頁面跳轉(zhuǎn)規(guī)則
initialRoute String 初始化路由
onGenerateRoute RouteFactory 路由回調(diào)函數(shù)。當(dāng)通過Navigator.of(context).pushNamed跳轉(zhuǎn)路由的時(shí)候鸵熟,在routes查找不到時(shí)副编,會(huì)調(diào)用該方法
onLocaleChanged - 當(dāng)系統(tǒng)修改語言的時(shí)候,會(huì)觸發(fā)這個(gè)回調(diào)
navigatorObservers List<NavigatorObserver> 導(dǎo)航觀察器
debugShowMaterialGrid bool 是否顯示布局網(wǎng)格流强,用來調(diào)試UI的工具
showPerformanceOverlay bool 顯示性能標(biāo)簽

2.1.1 設(shè)置主頁

使用home屬性設(shè)置應(yīng)用的主頁痹届,即整個(gè)應(yīng)用的主組件呻待。

2.1.2 路由處理

routes對(duì)象是一個(gè)Map<String, WidgetBuilder>。當(dāng)使用Navigator.pushNamed來跳轉(zhuǎn)路由的時(shí)候队腐,通過routes查找路由名字蚕捉,然后使用對(duì)應(yīng)的WidgetBuilder來構(gòu)造一個(gè)帶有頁面切換動(dòng)畫的MaterialPageRoute。如果應(yīng)用只有一個(gè)界面柴淘,則不用設(shè)置整個(gè)屬性迫淹,使用home即可。

2.1.3 自定義主題

應(yīng)用程序的主題为严,各種定制的顏色都可以設(shè)置敛熬,用于程序主題切換。

2.2 Scaffold(腳手架組件)

Scaffold實(shí)現(xiàn)了基本的Material Design布局第股。只要是在Material Design中定義過的單個(gè)界面顯示的布局組件元素应民,都可以使用Scaffold來繪制。

常用屬性

屬性名 類型 說明
appBar AppBar 顯示在界面頂部的一個(gè)AppBar
body Widget 當(dāng)前界面所顯示的主要內(nèi)容
floatingActionButton Widget 在Material Design中定義的一個(gè)功能按鈕
persistentFooterButtons List< Widget> 固定在下方顯示的按鈕
drawer Widget 側(cè)邊欄組件
bottomNavigatorBar Widget 顯示在底部的導(dǎo)航欄
backgroudColor Color 背景顏色
resizeToAvoidBottomPadding bool 控制界面內(nèi)容body是否重新布局來避免底部被覆蓋炸茧,比如當(dāng)鍵盤顯示時(shí)瑞妇,重新布局避免鍵盤蓋住內(nèi)容。默認(rèn)為true

2.3 AppBar(應(yīng)用按鈕組件)

應(yīng)用按鈕組件有AppBar和SliverAppBar梭冠。它們是Material Design中的AppBar辕狰,也就是Android中的ToolBar。
AppBar和SliverAppBar都繼承自StatefulWidget控漠,兩者的區(qū)別在于AppBar的位置是固定在應(yīng)用最上面的蔓倍;而SliverAppBar是可以跟隨內(nèi)容滾動(dòng)的。

常用屬性

屬性名 類型 默認(rèn)值 說明
leading Widget null 在標(biāo)題前面顯示一個(gè)組件盐捷,在首頁通常顯示應(yīng)用的logo偶翅;其他界面通常顯示返回按鈕
title Widget null 當(dāng)前界面的標(biāo)題
actions List<Widget> null 一個(gè)Widget列表,常用菜單通常使用IconButton碉渡,不常用的通常使用PopupMenuButton顯示三個(gè)點(diǎn)聚谁,點(diǎn)擊后彈出二級(jí)菜單
bottom PreferredSizeWidget null 通常是一個(gè)TabBar。用來在標(biāo)題下方顯示一個(gè)Tab導(dǎo)航欄
elevation double 4 控制AppBar下方陰影的高度
flexibleSpace Widget null 一個(gè)顯示在AppBar下方的組件滞诺,高度和AppBar一樣形导,可以實(shí)現(xiàn)一些特殊的效果,該屬性通常在SliverAppBar中使用
backgroundColor Color ThemeData.primaryColor 背景色
brightness Brightness ThemeData.primaryColorBrightness AppBar的亮度习霹,有白色和黑色兩種主題
iconTheme IconThemeData ThemeData.primaryIconTheme AppBar上圖標(biāo)的顏色朵耕、透明度和尺寸信息
textTheme TextTheme ThemeData.primaryTextTheme AppBar上文字樣式
centerTitle bool - 標(biāo)題是否居中顯示,不同操作系統(tǒng)淋叶,顯示方式不一樣

2.4 BottomNavigatorBar(底部導(dǎo)航欄)

BottomNavigatorBar是底部導(dǎo)航欄阎曹,可以很容易地在tab之間切換和瀏覽頂級(jí)視圖。

常見屬性

屬性名 類型 說明
currentIndex int 當(dāng)前索引
fixedColor Color 選中按鈕的顏色。不指定則使用系統(tǒng)主題色
iconSize double 按鈕圖形大小
items List<BottomNavigatorBarItem> 底部導(dǎo)航欄按鈕集处嫌。每一項(xiàng)是一個(gè)BottomNavigatorBarItem栅贴,包含icon圖標(biāo)和title文本
onTap ValueChanged<int> 按下按鈕的回調(diào)事件。需要根據(jù)返回的索引設(shè)置當(dāng)前索引

2.5 TabBar(水平選項(xiàng)卡及視圖組件)

TabBar是一個(gè)顯示水平選項(xiàng)卡的Material Design組件熏迹,通常需要配套Tab選項(xiàng)組件及TabBarView頁面視圖組件一起使用筹误。
TabBar常見屬性

屬性名 類型 說明
isScrolled bool 是否可以水平滾動(dòng)
tabs List<Widget> Tab選項(xiàng)列表

Tab常見屬性

屬性名 類型 說明
icon Widget Tab圖標(biāo)
text String Tab文本

TabBarView常見屬性

屬性名 類型 說明
controller TabController 指定視圖的控制器
childrens List<Widget> 視圖組件的child為一個(gè)列表,一個(gè)選項(xiàng)卡對(duì)應(yīng)一個(gè)視圖

2.6 Drawer(抽屜組件)

Drawer可以實(shí)現(xiàn)類似抽屜拉入推出的效果癣缅,通常與ListView組合使用厨剪。

Drawer常用屬性

屬性名 類型 默認(rèn)值 說明
child Widget - Drawer的child可以放置任意可顯示的組件
elevation double 16 陰影尺寸

Drawer可以添加頭部效果:

  • DrawerHeader:展示基本信息
  • UserAccountsDrawerHeader:展示用戶頭像、用戶名友存、Email等信息

DrawerHeader常用屬性

屬性名 類型 說明
decoration Decoration header區(qū)域的decoration祷膳,通常用來設(shè)置背景顏色或背景圖片
curve Curve 如果decoration發(fā)生了變化,則會(huì)使用curve設(shè)置的變化曲線和duration設(shè)置的動(dòng)畫時(shí)間來做一個(gè)動(dòng)畫效果
child Widget Header里面所顯示的內(nèi)容控件
padding EdgeInsetsGeometry Header里面內(nèi)容控件的padding值屡立,如果child為null直晨,該值無效
margin EdgeInsetsGeometry Header四周的間隙

UserAccountsDrawerHeader常用屬性

屬性名 類型 說明
margin EdgeInsetsGeometry Header四周的間隙
decoration Decoration header區(qū)域的decoration,通常用來設(shè)置背景顏色或背景圖片
currentAccountPicture Widget 用來設(shè)置當(dāng)前用戶的頭像
otherAccountsPicture Widget 用來設(shè)置當(dāng)前用戶其他賬號(hào)的頭像
accountName Widget 當(dāng)前用戶的名字
accountEmail Widget 當(dāng)前用戶的Email
onDetailsPressed VoidCallback 當(dāng)accountName或者accountEmail被點(diǎn)擊的時(shí)候所觸發(fā)的回調(diào)函數(shù)膨俐,可以用來顯示其他額外的信息

3. 按鈕和提示組件

3.1 FloatingActionButton(懸停按鈕組件)

FloatingActionButton對(duì)應(yīng)一個(gè)圓形圖標(biāo)按鈕勇皇,懸停在內(nèi)容之上,以展示應(yīng)用程序中的主要?jiǎng)幼鞣俅獭n愃艻OS里的小白點(diǎn)敛摘。

FloatingActionButton常用屬性

屬性名 類型 默認(rèn)值 說明
child - - -
tooltip - - -
foregroundColor - - -
backgroundColor - - -
elevation - - -
highlightElevation - - -
onPressed - - -
shape - - -

3.2 FlatButton(扁平按鈕組件)

FlatButton是一個(gè)扁平的Material Design風(fēng)格的按鈕,點(diǎn)擊時(shí)會(huì)有一個(gè)陰影效果乳愉。

3.3 PopupMenuButton(彈出菜單組件)

PopupMenuButton一般放在應(yīng)用右上角兄淫,表示更多操作,菜單項(xiàng)使用PopupMenuItem組件蔓姚。

PopupMenuButton常用屬性

屬性名 類型 說明
child - -
icon - -
itemBuilder - -
onSelected - -

3.4 SimpleDialog(簡單對(duì)話框組件)

SimpleDialog用于設(shè)計(jì)簡單的對(duì)話框捕虽,可以顯示附加的提示或操作。SimpleDialog通常需要配合SimpleDialogOption組件一起使用坡脐。

SimpleDialog常用屬性

屬性名 類型 說明
children List<Widget> 對(duì)話框子項(xiàng)
title Widget 通常是一個(gè)文本控件
contentPadding EdgeInsetsGeometry 內(nèi)容部分間距
titlePadding EdgeInsetsGeometry 標(biāo)題部分間距
  • 通常對(duì)話框都是由某個(gè)動(dòng)作來觸發(fā)渲染的泄私,比如點(diǎn)擊按鈕,點(diǎn)擊菜單等备闲。所以對(duì)話框一般要封裝在一個(gè)方法里實(shí)現(xiàn)晌端。
  • 另外這個(gè)過程是異步的需要加入async/await處理。

3.5 AlertDialog(提示對(duì)話框組件)

AlertDialog比SimpleDialog對(duì)話框又復(fù)雜一些浅役,不僅有提示內(nèi)容斩松,還有一些操作按鈕伶唯,如確定和取消等觉既,內(nèi)容部分可以用SingleChildScrollView進(jìn)行包裹。

AlertDialog常用屬性

屬性名 類型 說明
actions List<Widget> 對(duì)話框底部操作按鈕,如確定瞪讼、取消等
title Widget 通常是一個(gè)文本控件
contentPadding EdgeInsetsGeometry 內(nèi)容部分間距
content Widget 內(nèi)容部分钧椰,通常為對(duì)話框的提示內(nèi)容
titlePadding EdgeInsetsGeometry 標(biāo)題部分間距

3.6 SnackBar(輕量提示組件)

SnackBar是一個(gè)輕量級(jí)消息提示組件,在屏幕底部顯示符欠。

SnackBar常用屬性

屬性名 類型 默認(rèn)值 說明
action SnackBarAction - 提示消息里執(zhí)行的動(dòng)作嫡霞,比如用戶想撤銷時(shí)可以點(diǎn)擊操作
animation Animation<double> - 給組件添加動(dòng)畫效果
content Widget - 提示消息內(nèi)容,通常為文本組件
duration Duration 4.0秒 動(dòng)畫執(zhí)行的時(shí)長
backgroundColor Color - 消息面板的背景色

4. 其他組件

4.1 TextField(文本框組件)

TextField就是用來做文本輸入的組件希柿。

  • 注意與Text組件區(qū)分诊沪,Text主要用于顯示文本,不接受文本輸入曾撤。

TextField常用屬性

屬性名 類型 說明
maxLength int 最大長度
maxLines int 最大行數(shù)
autocorrect bool 是否自動(dòng)更正
autofocus bool 是否自動(dòng)對(duì)焦
obscureText bool 是否是密碼
textAlign TextAlign 文本對(duì)齊方式
style TextStyle 文本的樣式
inputFormatters List<TextInputFormatter> 允許的輸入格式
onChanged VoidChanged<String> 內(nèi)容改變時(shí)回調(diào)
onSubmitted VoidChanged<String> 內(nèi)容提交時(shí)回調(diào)
enabled bool 是否禁用

4.2 Card(卡片組件)

Card內(nèi)容可以由大多數(shù)類型的組件構(gòu)成端姚,但通常與ListTitle一起使用。Card有一個(gè)child挤悉,但可以是支持多個(gè)child的Row渐裸、Column、ListView装悲、GridView或其他小部件昏鹃。默認(rèn)情況下,Card將其大小縮小為0像素诀诊《床常可以使用SizedBox來限制Card的大小。

Card常用屬性

屬性名 類型 默認(rèn)值 說明
child Widget - 組件的子元素属瓣,任意Widget都可以
margin EdgeInsetsGeometry - 圍繞在decoration和child之外的空白區(qū)域您宪,不屬于內(nèi)容區(qū)域
shape ShapeBorder RoundedRectangleBorder Card的陰影效果,默認(rèn)的陰影效果為圓角的長方形邊奠涌∠芫蓿弧度為4.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溜畅,隨后出現(xiàn)的幾起案子捏卓,更是在濱河造成了極大的恐慌,老刑警劉巖慈格,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怠晴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浴捆,警方通過查閱死者的電腦和手機(jī)蒜田,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來选泻,“玉大人冲粤,你說我怎么就攤上這事美莫。” “怎么了梯捕?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵厢呵,是天一觀的道長。 經(jīng)常有香客問我傀顾,道長襟铭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任短曾,我火速辦了婚禮寒砖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫉拐。我一直安慰自己入撒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布椭岩。 她就那樣靜靜地躺著茅逮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪判哥。 梳的紋絲不亂的頭發(fā)上献雅,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音塌计,去河邊找鬼挺身。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锌仅,可吹牛的內(nèi)容都是我干的章钾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼热芹,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贱傀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伊脓,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤府寒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后报腔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體株搔,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年纯蛾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纤房。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翻诉,死狀恐怖炮姨,靈堂內(nèi)的尸體忽然破棺而出捌刮,到底是詐尸還是另有隱情,我是刑警寧澤剑令,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站拄查,受9級(jí)特大地震影響吁津,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堕扶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一碍脏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稍算,春花似錦典尾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至科平,卻和暖如春褥紫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞪慧。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工髓考, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弃酌。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓氨菇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妓湘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子查蓉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容