Flutter ShapeBorder 使用总结
简介
ShapeBorder 用于设置形状和轮廓,比如圆形,矩形,圆角矩形等。常用于 Container 中。
继承结构如下:
- ShapeBorder【abstract】
- BeveledRectangleBorder
- BoxBorder【abstract】
- Border
- BorderDirectional
- CircleBorder
- ContinuousRectangleBorder
- RoundedRectangleBorder
- StadiumBorder
- InputBorder【abstract】
- OutlineInputBorder
- UnderlineInputBorder
其中 ShapeBorder、BoxBorder、InputBorder 是抽象父类。InputBorder 通常用于输入框相关的。
类的关系图
ShapeBorder子类继承关系图
BeveledRectangleBorder
斜面圆角矩形
继承关系:
BeveledRectangleBorder > ShapeBorder
Widget _beveledRectangleBorder() {
return Center(
child: Container(
width: 240,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: BeveledRectangleBorder(
borderRadius: BorderRadius.circular(20),
side: BorderSide(
width: 2,
color: Colors.blue,
style: BorderStyle.solid,
),
),
),
),
);
}
效果如下:
beveled_rectangle_border
BoxBorder
BoxBorder主要掌管边线方面的事,自身是abstract,不能直接用
BoxBorder官方说明
Base class for box borders that can paint as rectangles, circles, or rounded rectangles.
Border
继承关系:
Border > BoxBorder > ShapeBorder
Border官方说明
A border of a box, comprised of four sides: top, right, bottom, left.
Widget _border() {
return Center(
child: Container(
margin: EdgeInsets.all(16),
padding: EdgeInsets.all(16),
decoration: ShapeDecoration(
color: Colors.orange,
shape: Border(
top: BorderSide(width: 6.0, color: Colors.black12),
left: BorderSide(width: 6.0, color: Colors.black12),
right: BorderSide(width: 6.0, color: Colors.black26),
bottom: BorderSide(width: 6.0, color: Colors.black26),
),
),
child: Text(
"Border",
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
);
}
效果图:
border
BorderDirectional
继承关系:
BorderDirectional > BoxBorder > ShapeBorder
BorderDirectional` 通过 `top`,`bottom`,`start`,`end`分别控制上下左右的边线
边线对象`BorderSide
Widget _borderDirectional() {
return Center(
child: Container(
width: 240,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: BorderDirectional(
start: BorderSide(color: Colors.black, width: 15),
end: BorderSide(color: Colors.black, width: 15),
top: BorderSide(
color: Colors.black,
),
bottom: BorderSide(
color: Colors.black,
),
),
),
),
);
}
效果如下:
border_directional_01
只设置左右的BorderSide
Widget _borderDirectional2() {
return Center(
child: Container(
width: 240,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: BorderDirectional(
start: BorderSide(color: Colors.black, width: 15),
end: BorderSide(color: Colors.black, width: 15),
),
),
),
);
}
效果如下:
border_directional_02
CircleBorder
圆形边框。
继承关系:
CircleBorder > ShapeBorder
Widget _circleBorder1() {
return Center(
child: Container(
width: 120,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: CircleBorder(
side: BorderSide(),
),
),
),
);
}
效果如下:
circle_border_01
上面的是使用默认参数的效果
circle_border_03
通过设置BorderSide来设置边框颜色和宽度,以及是否显示边框
Widget _circleBorder2() {
return Center(
child: Container(
width: 120,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: CircleBorder(
side: BorderSide(
width: 10,
color: Colors.blue,
style: BorderStyle.solid,
),
),
),
),
);
}
效果如下:
circle_border_02
ContinuousRectangleBorder
平滑过渡的矩形边框
继承关系:
ContinuousRectangleBorder > ShapeBorder
Widget _continuousRectangleBorder() {
return Center(
child: Container(
width: 240,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: ContinuousRectangleBorder(
borderRadius: BorderRadius.circular(40),
side: BorderSide(
width: 2,
color: Colors.blue,
style: BorderStyle.solid,
),
),
),
),
);
}
效果如下:
continuous_rectangle_border
RoundedRectangleBorder
圆角矩形。
继承关系:
RoundedRectangleBorder > ShapeBorder
Widget _roundedRectangleBorder() {
return Center(
child: Container(
width: 240,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
side: BorderSide(
width: 2,
color: Colors.blue,
style: BorderStyle.solid,
),
),
),
),
);
}
效果如下:
rounded_rectangle_border_01
StadiumBorder
体育场形状。即两边是半圆。
继承关系:
StadiumBorder > ShapeBorder
Widget _stadiumBorder() {
return Center(
child: Container(
width: 240,
height: 120,
margin: EdgeInsets.all(16),
decoration: ShapeDecoration(
image: DecorationImage(
image: AssetImage('lib/assets/img_flutter.png'),
fit: BoxFit.cover,
),
shape: StadiumBorder(
side: BorderSide(
width: 2,
color: Colors.blue,
style: BorderStyle.solid,
),
),
),
),
);
}
效果如下:
stadiu_border_01
InputBorder
继承关系:
InputBorder > ShapeBorder
官方说明:
Defines the appearance of an [InputDecorator]’s border. An input decorator’s border is specified by [InputDecoration.border]. The border is drawn relative to the input decorator’s “container” which is the optionally filled area above the decorator’s helper, error,and counter.
常用的输入边框,有2个衍生子类OutlineInputBorder
和UnderlineInputBorder
OutlineInputBorder
继承关系:
OutlineInputBorder > InputBorder > ShapeBorder
Widget _outlineInputBorder() {
return Center(
child: Container(
margin: EdgeInsets.all(16),
padding: EdgeInsets.all(16),
decoration: ShapeDecoration(
color: Colors.orange,
shape: OutlineInputBorder(
borderSide: BorderSide(width: 2.0, color: Colors.purple),
borderRadius: BorderRadius.circular(20.0),
),
),
child: Text(
"OutlineInputBorder",
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
);
}
效果如下:
outlineInput_borde
UnderlineInputBorder
继承关系:
UnderlineInputBorder > InputBorder > ShapeBorder
Widget _underlineInputBorder() {
return Center(
child: Container(
margin: EdgeInsets.all(16),
padding: EdgeInsets.all(16),
decoration: ShapeDecoration(
color: Colors.orange,
shape: UnderlineInputBorder(
borderSide: BorderSide(width: 2.0, color: Colors.purple),
borderRadius: BorderRadius.circular(20.0),
),
),
child: Text(
"UnderlineInputBorder",
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
);
}
效果如下:
underlineInput_border
最后
这里也为想要学习Flutter的朋友们准备了两份学习资料《Flutter Dart语言编程入门到精通》《Flutter实战》,从编程语言到项目实战,一条龙服务!!
《Flutter Dart 语言编程入门到精通》
-
第一章 Dart语言基础
-
第二章 Dart 异步编程
-
第三章 异步之 Stream 详解
-
第四章 Dart标准输入输出流
-
第五章 Dart 网络编程
-
第六章 Flutter 爬虫与服务端
-
第七章 Dart 的服务端开发
-
第八章 Dart 调用C语言混合编程
-
第九章 LuaDardo中Dart与Lua的相互调用
《Flutter实战:第二版》
- 第一章:起步
- 第二章:第一个Flutter应用
- 第三章:基础组件
- 第四章:布局类组件
- 第五章:容器类组件
-
第六章:可滚动组件
-
第七章:功能型组件
-
第八章:事件处理与通知
-
第九章:动画
-
第十章:自定义组件
-
第十一章:文件操作与网络请求
-
第十二章:Flutter扩展
-
第十三章:国际化
-
第十四章:Flutter核心原理
-
第十五章:一个完整的Flutter应用
有需要学习资料的朋友扫描下方二维码即可免费领取!!!