1.佈局元件
1.1.Container
一個擁有繪製、定位、調整大小的 widget。
Container(
width: 300, //寬度
height: 300, //高度
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5), //圓角
border: Border.all(width: 2.0, color: Colors.blueAccent //邊框
),
color: Colors.green, //顏色
),
alignment: Alignment.center, //對齊方式
padding: EdgeInsets.all(10), //內邊距
margin: EdgeInsets.all(10), //外邊距
child: Text('測試'), //子元件
);
複製程式碼
1.2.Row
在水平方向上排列子widget的列表。
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, //主隊齊方式
crossAxisAlignment: CrossAxisAlignment.center, //豎對齊方式
children: [ //元件陣列
Text('測試1'),
Expanded( //擴充套件元件
child: Text(
'測試2',
textAlign: TextAlign.center,
),
flex: 1, //剩下的都是我的
),
Text('測試3'),
],
),
複製程式碼
1.3.Column
在垂直方向上排列子widget的列表。
Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, //主隊齊方式
crossAxisAlignment: CrossAxisAlignment.center, //橫對齊方式
children: [ //元件陣列
Text('測試1'),
Text('測試2'),
Text('測試3'),
],
),
複製程式碼
1.4.Padding
一個widget, 會給其子widget新增指定的填充。
Card(
color: Colors.yellow,
child: Padding(
padding: EdgeInsets.all(10),
child: Text('測試'),
),
);
複製程式碼
1.5.Center
將其子widget居中顯示在自身內部的widget。
Container(
width: 100,
height: 100,
color: Colors.yellow,
child: Center(
child: Text('測試'),
),
);
複製程式碼
1.6.Align
一個widget,它可以將其子widget對齊,並可以根據子widget的大小自動調整大小。
Container(
width: 100,
height: 100,
color: Colors.yellow,
child: Align(
alignment: Alignment(0, 0), //範圍-1~1,0為中間
child: Text('測試'),
),
);
複製程式碼
1.7.AspectRatio
一個widget,試圖將子widget的大小指定為某個特定的長寬比。自身的比例。
Container(
alignment: Alignment.center,
height: 200,
color: Colors.blueAccent,
child: AspectRatio(
aspectRatio: 3, //是自身的寬高比3:1
child: Container(
color: Colors.yellow,
),
),
);
複製程式碼
1.8.SizeBox
一個特定大小的盒子。
SizedBox(
width: 100,
height: 100,
child: Center(
child: Text("測試"),
),
);
複製程式碼
1.9.Stack
可以允許其子widget簡單的堆疊在一起。
Stack( children: [
Container(
width: 200,
height: 200,
color: Colors.pinkAccent,
),
Container(
width: 100,
height: 100,
color: Colors.blueAccent,
),
],);
複製程式碼
2.基礎元件
2.1.Image
一個顯示圖片的widget。
Column(
children: [
Image(
image: NetworkImage("網路圖片"),
width: 100,
fit: BoxFit.fitWidth, //縮放模式
),
ClipOval( //圓角圖片
child: Image.asset(
'本地圖片',
width: 100,
height: 100,
fit: BoxFit.contain,
),
)
],
),
複製程式碼
2.2.Text
單一格式的文字。
Text(
'測試',
textAlign: TextAlign.center, //內容對齊方式
overflow: TextOverflow.ellipsis, //超出...
style: TextStyle( //字型型別
fontSize: 16,
fontWeight: FontWeight.bold,
fontFamily: '黑體',
color: Colors.blueAccent,
),
),
Text.rich(TextSpan( //富文字
text: '測試',
style: TextStyle(fontWeight: FontWeight.bold),
children: <TextSpan>[
TextSpan(text: '富文字', style: TextStyle(fontSize: 16))
]
)),
複製程式碼
2.3.Icon
系統設計的圖示。
Icon(
Icons.favorite, //圖示
color: Colors.pink, //圖示顏色
size: 24, //圖示大小
),
IconButton( //圖示按鈕
onPressed: () {
print('點選圖示');
},
icon: Icon(Icons.add),
),
複製程式碼
2.4.Button
帶有不同屬性的按鈕。
ElevatedButton( onPressed: () {},
child: Text("elevateButton"),
style: ButtonStyle(
textStyle: MaterialStateProperty.all(TextStyle(fontSize: 20)), //字型大小
foregroundColor: MaterialStateProperty.all(Colors.white), //字型顏色
backgroundColor: MaterialStateProperty.all(Colors.red), //背景顏色
padding: MaterialStateProperty.all(EdgeInsets.all(20)), //內邊距
shape: MaterialStateProperty.all(RoundedRectangleBorder( //形狀圓角
borderRadius: BorderRadius.circular(20))),
side: MaterialStateProperty.all(BorderSide(color: Colors.purple, width: 1)), //邊框大小顏色
minimumSize: MaterialStateProperty.all(Size(200, 200)), //按鈕大小
),
複製程式碼
2.5.Scaffold
Material Design佈局結構的基本實現。此類提供了用於顯示drawer、snackbar和底部sheet的API。
Scaffold(
appBar: AppBar( //導航欄
title: Text("Flutter Demo"), ),
body: Test(), //內容
backgroundColor: Colors.grey[100], //背景顏色
bottomNavigationBar: BottomNavigationBar( //底部欄
onTap: (index) {
print('點選的是第$index個');
},
currentIndex: 0,
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
BottomNavigationBarItem(icon: Icon(Icons.school), label: 'School'),
],
),
);
複製程式碼
2.6.AppBar
一個Material Design應用程式欄,由工具欄和其他可能的widget(如TabBar和FlexibleSpaceBar)組成。
AppBar( //導航欄
title: Text("Flutter Demo"),
actions: [
Icon(Icons.add),
PopupMenuButton( //彈出選單
itemBuilder: (BuildContext context) {
return [
PopupMenuItem(child: Text('測試1'), value: '1號'),
PopupMenuItem(child: Text('測試2'), value: '2號'),
PopupMenuItem(child: Text('測試3'), value: '3號'),
];
},
onSelected: (object) {
print(object);
},
),
],
backgroundColor: Colors.red,
foregroundColor: Colors.white,
),
複製程式碼
2.7.BottomNavigationBar
底部導航條,可以很容易地在tap之間切換和瀏覽頂級檢視。
BottomNavigationBar( //底部欄
onTap: (index) { print('點選的是第$index個'); },
currentIndex: 0,
backgroundColor: Colors.pink,
selectedItemColor: Colors.yellow,
unselectedItemColor: Colors.white,
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
BottomNavigationBarItem(icon: Icon(Icons.school), label: 'School'),
],
),
複製程式碼
2.8.TabBar
一個顯示水平選項卡的Material Design widget。
_tabController = TabController(length: 3, vsync: this);
TabBar(
tabs: [
Tab(icon: Icon(Icons.home)),
Tab(icon: Icon(Icons.send)),
Tab(icon: Icon(Icons.title)),
],
controller: _tabController,
),
複製程式碼
2.9.TabBarView
顯示與當前選中的選項卡相對應的頁面檢視。通常和TabBar一起使用。
_tabController = TabController(length: 3, vsync: this);
TabBarView(
children: [
Text('ceshi1'),
Text('ceshi2'),
Text('ceshi3'),
],
controller: _tabController,
),
複製程式碼
2.10.MateralApp
一個方便的widget,它封裝了應用程式實現Material Design所需要的一些widget。
MaterialApp(
debugShowCheckedModeBanner: false, //是否顯示測試
home: Home(), //主頁
theme: ThemeData(primaryColor: Colors.yellow), //主題設定
routes: { //路由集合
"/about": (context) => Test(),
},
);
複製程式碼
2.11.Drawer
從Scaffold邊緣水平滑動以顯示應用程式中導航連結的Material Design皮膚。
Scaffold(
drawer: Drawer( //左滑抽屜
child: ListView(
children: [
DrawerHeader(child: Text('Drawer Header')),
],
),
),
);
複製程式碼
2.12.TextField
文字輸入框。
TextField(
decoration: InputDecoration(
border: InputBorder.none, // 邊框設定
hintText: 'password', ),
keyboardType: TextInputType.number, //鍵盤型別
textInputAction: TextInputAction.search, //鍵盤右下角按鈕
autofocus: true, //自動聚焦
obscureText: true,//隱藏輸入內容,如password
maxLength: 10, ///最大長度
onChanged: (text) { //輸入變化 print(text); },
onSubmitted: (val) { //提交內容 print(val); },
enabled: true, //是否可點選
controller: TextEditingController(), //放在外面定義,用於監聽
)
複製程式碼
2.13.ListView
可滾動的列表控制元件。ListView是最常用的滾動widget,它在滾動方向上一個接一個地顯示它的子元件。在縱軸上,子元件被要求填充ListView。
ListView(
padding: EdgeInsets.all(20),
children: [
Container(
alignment: Alignment.center,
height: 100,
color: Colors.green,
child: Text('測試'),
),
Container(
alignment: Alignment.center,
height: 100,
color: Colors.blueAccent,
child: Text('測試'),
),
Container(
alignment: Alignment.center,
height: 100,
color: Colors.yellow,
child: Text('測試'),
),
],
);
class _TestState extends State<Test> {
final List<String> _text = ['測試', '開發', '釋出'];
@override Widget build(BuildContext context) {
return ListView.builder(
itemCount: _text.length,
itemBuilder: (BuildContext context, int index) {
return Container(
alignment: Alignment.center,
height: 100,
color: Colors.yellow,
child: Text(_text[index]),
);
}, )
;
}
}
複製程式碼
2.14.ListTile
一個固定高度的行,通常包含一些文字,以及一個行前或行尾圖示。
ListView(
children: [
ListTile(
leading: FlutterLogo(size: 40), //左邊圖示
title: Text('title'), //標題
subtitle: Text('subtitle'), //副標題
trailing: Icon(Icons.favorite), //右邊圖示
),
ListTile(
leading: FlutterLogo(size: 40),
title: Text('title'),
subtitle: Text('subtitle'),
trailing: Icon(Icons.favorite),
),
],
);
複製程式碼
2.15.Divider
一個邏輯1畫素厚的水平分割線,兩邊都有填充。
ListView(
children: [
ListTile(
title: Text('title'),
subtitle: Text('subtitle'),
),
Divider( //分割線
height: 20, //分割線高度
thickness: 5, //厚度高度
indent: 20, //前縮排
endIndent: 20, //後縮排
color: Colors.blueAccent, //顏色
),
ListTile(
title: Text('title'),
subtitle: Text('subtitle'),
),
],
);
複製程式碼
後續待補充。。。