示例 github:flutterlayout https://github.com/LiuC520/flutterlayout
MaterialApp
連載:flutter布局-1-column
連載:flutter布局-2-row
連載:flutter布局-3-center
連載:flutter布局-4-container
連載:[flutter布局-5-Matrix4矩陣變換
連載:flutter布局-6-MaterialApp
連載:flutter布局-7-About對話框
連載:flutter布局-8-animated_icons動畫圖片
AppBar: 包含狀態(tài)欄和導航欄
先看下上圖的具體用法
appBar: AppBar(
title: Container(
color: Colors.white10,
child: Row(
children: <Widget>[Text('標題1'), Text('標題2')],
),
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.playlist_play),
tooltip: 'Air it',
onPressed: null,
),
IconButton(
icon: Icon(Icons.playlist_add),
tooltip: 'Restitch it',
onPressed: null,
),
],
leading: Builder(
builder: (BuildContext context) {
return IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
Scaffold.of(context).openDrawer();
},
tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
);
},
), // 左側返回按鈕,可以有按鈕治笨,可以有文字
flexibleSpace: Text('d12321312'),
backgroundColor: Colors.red, //導航欄和狀態(tài)欄的的顏色
elevation: 10, //陰影的高度
bottom: PreferredSize(
child: Text('bottom'),
preferredSize: Size(30, 30)), // 在appbar下面顯示的東西
brightness: Brightness.light, //控制狀態(tài)欄的顏色砌们,lignt 文字是灰色的,dark是白色的
iconTheme: IconThemeData(
color: Colors.yellow,
opacity: 0.5,
size: 30), //icon的主題樣式,默認的顏色是黑色的催烘,不透明為1沥阱,size是24
textTheme: TextTheme(), //這個主題的參數(shù)比較多,flutter定義了13種不同的字體樣式
centerTitle: true, //標題是否居中,默認為false
toolbarOpacity: 0.5, //整個導航欄的不透明度
bottomOpacity: 0.8, //bottom的不透明度
titleSpacing: 10, //標題兩邊的空白區(qū)域,
),
1. title:標題
可以是文字或者widget伊群,可以自定義
如:
Container(
color: Colors.white10,
child: Row(
children: <Widget>[Text('標題1'), Text('標題2')],
),
),
//表示兩個文字橫向排列
// 也可以直接用一個text來代替
Text('標題1')
2. actions:表示右側的按鈕的動作
是一個包含widget的數(shù)組:
actions: <Widget>[
IconButton(
icon: Icon(Icons.playlist_play),
tooltip: 'Air it',
onPressed: null,
),
IconButton(
icon: Icon(Icons.playlist_add),
tooltip: 'Restitch it',
onPressed: null,
),
],
上面表示兩個按鈕考杉,同時還有點擊事件,只不過上面我把點擊事件寫成了空的舰始。
3. leading:表示左側的按鈕的動作
這個也是一個widget崇棠,也可以自定義動作,如下:
leading: Builder(
builder: (BuildContext context) {
return IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
Scaffold.of(context).openDrawer();
},
tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
);
},
), // 左側返回按鈕蔽午,可以有按鈕易茬,可以有文字
上面表示構造一個新的widget,點擊事件是打開左側的抽屜
4. flexibleSpace:
堆疊在工具欄和標簽欄后面。 它的高度與應用欄的整體高度相同抽莱。
flexible space 實際上并不靈活范抓,除非[AppBar]的容器改變了[AppBar]的大小。 [CustomScrollView]中的[SliverAppBar]在滾動時更改[AppBar]的高度食铐。
也可以看下 FlexibleSpaceBar
flexibleSpace: Text('d12321312'),
flexibleSpace: FlexibleSpaceBar(
title: Text('flexibleSpace'),
background: Icon(Icons
.add), //背景匕垫,一般是一個圖片,在title后面虐呻,[Image.fit] set to [BoxFit.cover].
centerTitle: true,
collapseMode: CollapseMode
.pin, // 背景 固定到位象泵,直到達到最小范圍。 默認是CollapseMode.parallax(將以視差方式滾動斟叼。)偶惠,還有一個是none,滾動沒有效果
),
5. backgroundColor: Colors.red, //導航欄和狀態(tài)欄的的顏色
導航欄的顏色和樣式可以再Main.dart的MaterialApp里面配置統(tǒng)一的朗涩。
但有時間我們的某些頁面有單獨的設計忽孽,這個背景也是可以修改的。
flutter布局-6-MaterialApp
6. elevation: 10, //陰影的高度
默認在導航欄的下面有4的高度陰影谢床,這個也可以修改的
7.bottom :導航欄下面顯示的widget
看上面圖片中的bottom文字
bottom: PreferredSize(
child: Text('bottom'),
preferredSize: Size(30, 30)), // 在appbar下面顯示的東西
其中這個bottom是需要PreferredSize
的兄一,里面有child和寬高,寬高用size來設置
8.brightness :狀態(tài)欄的亮度
這與[backgroundColor]识腿,[iconTheme]出革,[textTheme]
一起設置。
默認是和 ThemeData.primaryColorBrightness
一致的.
Brightness.light, 白底黑字
Brightness.dark, 黑底白字
9. iconTheme渡讼,左側圖表的樣式
iconTheme: IconThemeData(
color: Colors.yellow,
opacity: 0.5,
size: 30), //icon的主題樣式,默認的顏色是黑色的骂束,不透明為1,size是24
表示顏色是黃色成箫,不透明度是0.5栖雾,最大值是1;
以及大小是30伟众,默認的大小是24
10.textTheme:字體的樣式
我們要設置的話一般用merge析藕,這樣不會改變其他的值。
默認有13中樣式:
NAME SIZE WEIGHT SPACING 2018 NAME
display4 112.0 thin 0.0 headline1
display3 56.0 normal 0.0 headline2
display2 45.0 normal 0.0 headline3
display1 34.0 normal 0.0 headline4
headline 24.0 normal 0.0 headline5
title 20.0 medium 0.0 headline6
subhead 16.0 normal 0.0 subtitle1
body2 14.0 medium 0.0 body1
body1 14.0 normal 0.0 body2
caption 12.0 normal 0.0 caption
button 14.0 medium 0.0 button
subtitle 14.0 medium 0.0 subtitle2
overline 10.0 normal 0.0 overline
其中thin 表示字體的粗細為FontWeight.w100
normal是FontWeight.w400
medium是FontWeight.w500
字符間距為0.0
size就是字體的大小
11.centerTitle:標題是否居中
centerTitle: true, //標題是否居中凳厢,默認為false
默認是false账胧,一般我們的設計都是把導航欄的標題居中,不遵循android的md設計先紫,都是按照蘋果的設計來的
12. toolbarOpacity: 0.5, //整個導航欄的不透明度
13. bottomOpacity: 0.8, //bottom的不透明度
14. titleSpacing: 10, //標題兩邊的空白區(qū)域,
示例所在的位置:https://github.com/LiuC520/flutterlayout/blob/master/lib/material/appbar.dart