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
最佳,而不须要破费大量工夫去写动画。