Padding介紹
在應用程式中有許多widget
時,這個時候畫面常常會變得很擁擠,這個時候如果想要在widget之間來保留一些間距,那就用 Padding
為什麼使用 Padding
而不使用 Container.padding
屬性的 Container
?
Container
是將許多更簡單的 widget
組合在一個方便的包中,如果只需要設定 padding
,那我們最好使用 Padding
而不是 Container
示例程式碼
本文中很多效果都沒有截圖,可下載原始碼執行專案 原始碼地址,或者通過視訊教程檢視 視訊教程地址
Padding屬性和說明
總共2個屬性
欄位 | 屬性 | 描述 |
---|---|---|
padding | EdgeInsetsGeometry | 給子widget的間距 |
child | Widget | 子widget |
Padding屬性詳細使用
1、padding 、child
padding
給子widget
的間距
child
接收一個子 Widget
完整程式碼
import 'package:flutter/material.dart';
class PaddingExample extends StatefulWidget {
@override
_PaddingExampleState createState() => _PaddingExampleState();
}
class _PaddingExampleState extends State<PaddingExample> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Padding example"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.all(0),
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
),
Padding(
padding: EdgeInsets.all(0),
child: Container(
width: 100,
height: 100,
color: Colors.green,
),
),
Padding(
padding: EdgeInsets.all(0),
child: Container(
width: 100,
height: 100,
color: Colors.orange,
),
)
],
),
),
);
}
}
複製程式碼
EdgeInsetsGeometry詳解
EdgeInsetsGeometry
是一個描述邊距的元件,一般都是使用它的子類 EdgeInsets
來進行設定。
1、fromLTRB
設定左、上、右、下的邊距,可設定不同的值。
使用方法
Padding(
padding: EdgeInsets.fromLTRB(10, 20, 30, 40),
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
),
複製程式碼
2、all
同時設定所有的邊距為同一個值
使用方法
Padding(
padding: EdgeInsets.all(10),
child: Container(
width: 100,
height: 100,
color: Colors.green,
),
)
複製程式碼
3、only
根據需要設定某一個邊的間距
使用方法
Padding(
padding: EdgeInsets.only(
left: 10,
right: 10
),
child: Container(
width: 100,
height: 100,
color: Colors.orange,
),
)
複製程式碼
4、symmetric
設定水平(上下)、或者垂直(左右)的間距
使用方法
Padding(
padding: EdgeInsets.symmetric(
vertical: 10,
horizontal: 10
),
child: Container(
width: 100,
height: 100,
color: Colors.orange,
),
)
複製程式碼
完整程式碼
import 'package:flutter/material.dart';
class PaddingExample extends StatefulWidget {
@override
_PaddingExampleState createState() => _PaddingExampleState();
}
class _PaddingExampleState extends State<PaddingExample> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Padding example"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.fromLTRB(10, 20, 30, 40),
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
),
Padding(
padding: EdgeInsets.all(10),
child: Container(
width: 100,
height: 100,
color: Colors.green,
),
),
Padding(
padding: EdgeInsets.only(
left: 10,
right: 10
),
child: Container(
width: 100,
height: 100,
color: Colors.orange,
),
),
Padding(
padding: EdgeInsets.symmetric(
vertical: 10,
horizontal: 10
),
child: Container(
width: 100,
height: 100,
color: Colors.orange,
),
)
],
),
),
);
}
}
複製程式碼
AnimatedPadding介紹
`Padding` 元件的動畫版本,在設定的時間內縮放或放大到指定的padding
複製程式碼
AnimatedPadding建構函式
AnimatedPadding({
Key? key,
required this.padding, // 邊距
this.child, // 子Widget
Curve curve = Curves.linear, // 動畫的運動速率
required Duration duration, // 動畫的持續時間
VoidCallback? onEnd, // 動畫結束時的回撥
}) : assert(padding != null),
assert(padding.isNonNegative),
super(key: key, curve: curve, duration: duration, onEnd: onEnd);
複製程式碼
AnimatedPadding完整示例程式碼
import 'package:flutter/material.dart';
class AnimatedPaddingExample extends StatefulWidget {
@override
_AnimatedPaddingExampleState createState() => _AnimatedPaddingExampleState();
}
class _AnimatedPaddingExampleState extends State<AnimatedPaddingExample> {
double paddingAllValue = 0.0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("AnimatedPaddingExample"),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Padding: $paddingAllValue'),
AnimatedPadding(
padding: EdgeInsets.all(paddingAllValue),
duration: Duration(milliseconds: 1000),
curve: Curves.easeInOut,
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height / 4,
color: Colors.blue,
),
onEnd: () {
print("動畫結束時的回撥");
},
),
ElevatedButton(
child: Text('改變padding的值'),
onPressed: () {
setState(() {
paddingAllValue = paddingAllValue == 0.0 ? 50.0 : 0.0;
});
}),
],
),
);
}
}
複製程式碼
AnimatedPadding效果展示
總結
當只需要給元件之間增加一些間距時,使用Padding
是最好的選擇。而如果的Padding
在某種情況下需要改變其大小並且需要增加動畫效果時,使用AnimatedPadding
最佳,而不需要花費大量時間去寫動畫。