Skip to content

Commit d9cfd02

Browse files
committed
Merge branch 'dev' of https://github.com/efoxTeam/flutter-ui into dev
2 parents 71f1006 + 43bfe2a commit d9cfd02

File tree

9 files changed

+337
-22
lines changed

9 files changed

+337
-22
lines changed

assets/imgs/cool.jpg

22.7 KB
Loading

docs/widget/common/image/index.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,51 @@
1-
## **文档完善中**
1+
## **Image**
2+
3+
>
4+
用于展示图片的控件,支持本地图片,资源图片,网络图片等加载方式
5+
6+
### 构造方法
7+
``` dart
8+
Image({
9+
Key key,
10+
@required this.image,
11+
this.semanticLabel,
12+
this.excludeFromSemantics = false,
13+
this.width,
14+
this.height,
15+
this.color,
16+
this.colorBlendMode,
17+
this.fit,
18+
this.alignment = Alignment.center,
19+
this.repeat = ImageRepeat.noRepeat,
20+
this.centerSlice,
21+
this.matchTextDirection = false,
22+
this.gaplessPlayback = false,
23+
this.filterQuality = FilterQuality.low,
24+
})
25+
```
26+
27+
### 属性介绍
28+
* image:
29+
* Image(): 通用方法,使用ImageProvider(包括:AssetImage, NetworkImage, FileImage, MemoryImage)实现,如下方法本质上也是使用这个方法
30+
* Image.asset: 加载资源图片
31+
* Image.file: 加载本地图片文件夹
32+
* Image.network: 加载网络图片
33+
* Image.memory: 加载Uint8List资源图片
34+
* width:图片容器宽度
35+
* height:图片容器高度
36+
* color:color一般和colorBlendMod配合使用
37+
* colorBlendMode:和color配合使用,添加滤镜效果
38+
* fit:如何将图像分配到布局空间中
39+
* BoxFit.fill : 全图显示,显示尽可能拉伸,充满
40+
* BoxFit.contain : 全图显示,显示原比例,不需充满
41+
* BoxFit.cover : 显示可能拉伸,可能裁剪,充满
42+
* BoxFit.fitWidth : 显示尽可能拉伸,可能裁剪,宽度充满
43+
* BoxFit.fitHeight 显示尽可能拉伸,可能裁剪,高度充满:
44+
* BoxFit.none 无fit:
45+
* BoxFit.scaleDown 效果和contain差不多,但此属性不允许显示超过原图片大小,可小不可大:
46+
* alignment = Alignment.center:控制图片的显示位置
47+
* repeat = ImageRepeat.noRepeat:图片是否重复
48+
* centerSlice:九个补丁图像的中心切片
49+
* matchTextDirection = false:若值为turn,与Directionality配合使用,图片显示方向
50+
* gaplessPlayback = false:当ImageProvider发生变化后,重新加载图片的过程中,原图片的展示是否保留。若值为true,保留,若为false,不保留,直接空白等待下一张图片加载
51+
* filterQuality = FilterQuality.low:用于设置图像的FilterQuality
Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,35 @@
1-
## **文档完善中**
1+
## **ListTile**
2+
>
3+
单个固定高度的行,通常包含一些文本和前导或者尾随的图标,通常在ListView中使用
4+
5+
### 构造方法
6+
``` dart
7+
ListTile({
8+
Key key,
9+
this.leading,
10+
this.title,
11+
this.subtitle,
12+
this.trailing,
13+
this.isThreeLine = false,
14+
this.dense,
15+
this.contentPadding,
16+
this.enabled = true,
17+
this.onTap,
18+
this.onLongPress,
19+
this.selected = false,
20+
})
21+
```
22+
23+
### 属性介绍
24+
25+
* leading:显示左侧的小组件
26+
* title:标题
27+
* subtitle:子标题
28+
* trailing:显示右侧的小组件
29+
* isThreeLine = false:是否显示三行文本
30+
* dense:是否垂直密集显示
31+
* contentPadding:ListTile的内部填充
32+
* enabled = true:是否是交互式的
33+
* onTap:点击时的回调
34+
* onLongPress:长按时的回调
35+
* selected = false:图标和文本是否以相同颜色呈现
Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,29 @@
1-
## **文档完善中**
1+
## **Stepper**
2+
3+
>
4+
一个步骤小控件,通过一系列步骤显示进度,对于表单的情况,Stepper特别有用,可以通过控制需要完成多个步骤才能提交的表单
5+
6+
### 构造方法
7+
``` dart
8+
Stepper({
9+
Key key,
10+
@required this.steps,
11+
this.physics,
12+
this.type = StepperType.vertical,
13+
this.currentStep = 0,
14+
this.onStepTapped,
15+
this.onStepContinue,
16+
this.onStepCancel,
17+
this.controlsBuilder,
18+
})
19+
```
20+
21+
### 属性介绍
22+
* steps: Stepper的内容,包含标题,副标题,内容
23+
* physics: Stepper滚动视图应如何响应用户输入
24+
* type = StepperType.vertical: 确定Stepper的布局类型
25+
* currentStep: 当前步骤索引,内容被显示
26+
* onStepTapped: step被点击时的回调
27+
* onStepContinue: 点击 继续 按钮时的回调
28+
* onStepCancel: 点击 取消 按钮时的回调
29+
* controlsBuilder: 用于创建自定义控件的回调

lib/components/widget_comp.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class IndexState extends State<Index> {
7979
this._bodyList.add(authorTile(nameKey));
8080
this._bodyList.add(Divider());
8181
}
82+
print('文档完成长度:${mdText.length}');
8283
if (mdText.length > 30) {
8384
this._bodyList.add(await markdown_comp.Index(mdText));
8485
// demo

lib/widget/common/image/demo.dart

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ class Index extends StatefulWidget {
66
}
77

88
class _IndexState extends State<Index> {
9+
List _imageType = ['Image.network', 'Image.asset', 'ImageProvider'];
10+
911
@override
1012
void initState() {
1113
super.initState();
@@ -17,9 +19,60 @@ class _IndexState extends State<Index> {
1719
appBar: AppBar(
1820
title: Text('Image'),
1921
),
20-
body: Center(
21-
child: Text('更新中'),
22-
),
22+
body: Container(
23+
margin: EdgeInsets.fromLTRB(20.0, 0, 20.0, 0),
24+
child: ListView.builder(
25+
itemCount: _imageType.length,
26+
itemBuilder: (context, index) {
27+
return _Stack(_imageType[index]);
28+
},
29+
)
30+
)
2331
);
2432
}
33+
34+
Widget _Stack (String item) {
35+
return Stack(
36+
children: <Widget>[
37+
Container(
38+
margin: EdgeInsets.only(top: 5.0),
39+
width: double.infinity,
40+
child: _Image(item)
41+
),
42+
Positioned(
43+
top: 32,
44+
left: 32,
45+
child: Text(item, style: TextStyle(fontSize:20, color: Theme.of(context).primaryColor),),
46+
)
47+
],
48+
);
49+
}
50+
51+
Widget _Image (String item) {
52+
switch (item) {
53+
case 'Image.network':
54+
return Image.network(
55+
'https://desk-fd.zol-img.com.cn/t_s960x600c5/g2/M00/02/05/Cg-4WlVxbqyIUWdVAAZhyzM-HqkAAEs-AET61oABmHj388.jpg',
56+
fit: BoxFit.cover
57+
);
58+
break;
59+
case 'Image.asset':
60+
return Image.asset(
61+
'assets/imgs/cool.jpg',
62+
fit: BoxFit.cover
63+
);
64+
break;
65+
case 'ImageProvider':
66+
return Image(
67+
image: NetworkImage(
68+
'https://pic.qqtn.com/up/2017-10/15082099209936659.jpg'
69+
),
70+
);
71+
default:
72+
return Image.network(
73+
'https://desk-fd.zol-img.com.cn/t_s960x600c5/g2/M00/02/05/Cg-4WlVxbqyIUWdVAAZhyzM-HqkAAEs-AET61oABmHj388.jpg',
74+
fit: BoxFit.cover,
75+
);
76+
}
77+
}
2578
}

lib/widget/common/listtile/demo.dart

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,23 @@ class Index extends StatefulWidget {
66
}
77

88
class _IndexState extends State<Index> {
9+
List data = [
10+
{
11+
'enable': true,
12+
'subtitle': 'subtitle is not focus',
13+
'selected': false
14+
},
15+
{
16+
'enable': false,
17+
'subtitle': 'subtitle is not focus',
18+
'selected': true
19+
},
20+
{
21+
'enable': true,
22+
'subtitle': 'subtitle is not focus',
23+
'selected': true
24+
}
25+
];
926
@override
1027
void initState() {
1128
super.initState();
@@ -17,9 +34,58 @@ class _IndexState extends State<Index> {
1734
appBar: AppBar(
1835
title: Text('ListTile'),
1936
),
20-
body: Center(
21-
child: Text('更新中'),
22-
),
37+
body: Container(
38+
padding: EdgeInsets.fromLTRB(20.0, 0, 20.0, 0),
39+
child: ListView.builder(
40+
itemCount: data.length,
41+
itemBuilder: (context, index) {
42+
return Column(
43+
children: <Widget>[
44+
ListTile(
45+
leading: CircleAvatar(
46+
backgroundImage: AssetImage('assets/imgs/cool.jpg'),
47+
),
48+
title: Text('title'),
49+
subtitle: Text(data[index]['subtitle']),
50+
trailing: Icon(Icons.arrow_right),
51+
onTap: (){
52+
if (!data[index]['selected']) {
53+
this.setState((){
54+
data[index]['subtitle'] = 'subtitle is focus now';
55+
data[index]['selected'] = true;
56+
});
57+
} else {
58+
this.setState((){
59+
data[index]['subtitle'] = 'subtitle is not focus';
60+
data[index]['selected'] = false;
61+
});
62+
}
63+
},
64+
onLongPress: (){
65+
Scaffold.of(context).showSnackBar(
66+
SnackBar(
67+
content: Text('你长按了我'),
68+
backgroundColor: Theme.of(context).primaryColor,
69+
action: SnackBarAction(
70+
textColor: Colors.white,
71+
label: '取消',
72+
onPressed: (){},
73+
),
74+
duration: Duration(seconds: 2),
75+
)
76+
);
77+
},
78+
selected: data[index]['selected'],
79+
isThreeLine: false,
80+
enabled: data[index]['enable'],
81+
contentPadding: EdgeInsets.all(0),
82+
),
83+
Divider()
84+
],
85+
);
86+
},
87+
)
88+
)
2389
);
2490
}
2591
}

0 commit comments

Comments
 (0)