列表常见的几种情况:
ListView
组件常用的参数:
scrollDirection
: Axis, Axis.horizontal
横向列表 Axis.vertical
垂直列表(默认垂直列表)padding
: EdgeInsetsGeometry, 内边距reverse
: bool, 组件反向排序children
: List, 列表元素Icon
装饰列表组件// HomeContent 组件
class HomeContent extends StatelessWidget{
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10), // 设置10内边距
children: <Widget>[
ListTile(
leading: Icon(Icons.home,size: 50), // 设置图标 尺寸
title: Text('这是列表标题内容',
style: TextStyle( // 设置标题样式
fontSize: 23,
fontWeight: FontWeight.w500
)
),
subtitle: Text('bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。'),
),
ListTile(
leading: Icon(Icons.settings), // 设置图标
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
),
ListTile(
trailing: Icon(Icons.settings_brightness), // 设置图标 放在后面
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
),
ListTile(
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
),
ListTile(
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
)
],
);
}
}
案例效果展示:
Image
装饰列表组件// HomeContent 组件
class HomeContent extends StatelessWidget{
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10), // 设置10内边距
children: <Widget>[
ListTile(
leading: Image.network("https://b-ssl.duitang.com/uploads/item/201603/06/20160306015808_yYPGz.thumb.700_0.jpeg"), // 设置图片
title: Text('这是列表标题内容',
style: TextStyle( // 设置标题样式
fontSize: 23,
fontWeight: FontWeight.w500
)
),
subtitle: Text('bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。'),
),
ListTile(
leading: Image.network("https://b-ssl.duitang.com/uploads/item/201601/02/20160102164729_tQefv.jpeg"), // 设置图片
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
),
ListTile(
leading: Image.network("https://b-ssl.duitang.com/uploads/item/201501/16/20150116145245_x4zLY.jpeg"), // 设置图标 放在后面
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
),
ListTile(
title: Text('这是列表标题内容'),
subtitle: Text('这是列表副标题内容'),
)
],
);
}
}
案例效果展示:
// HomeContent 组件
class HomeContent extends StatelessWidget{
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
padding: EdgeInsets.all(10),
height: 250,
child: ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
Container(
width: 180,
color: Colors.cyan,
child: ListView(
children: <Widget>[
Image.network("https://b-ssl.duitang.com/uploads/item/201510/14/20151014195239_vcHiX.thumb.700_0.jpeg"),
Text(
"图片标题文字",
textAlign: TextAlign.center,
)
],
),
),
Container(
width: 180,
color: Colors.deepPurple
),
Container(
width: 180,
color: Colors.indigo
),
Container(
width: 180,
color: Colors.orange
)
],
),
);
}
}
案例展示效果如下:
首先我们来看一下,List
类型的使用
List
是Dart
的集合类型之一,其实你可以把它简单理解为数组,其他语言也都有这个类型。它的声明有几种方式:
那我们这里使用的是一个List传递,然后直接用List中的generate方法进行生产List里的元素。最后的结果是生产了一个带值的List变量。代码如下:
void main () => runApp(MyApp(
items: new List<String>.generate(1000, (i)=> "Item $i")
));
注解:
generate
生成器对items进行赋值。generate
方法传递两个参数,第一个参数是生成的个数,第二个是方法。// HomeContent 组件
class HomeContent extends StatelessWidget{
// 私有方法 _getData 生成列表
List<Widget> _getData(){
List<Widget> list = new List();
for(int i=0;i<20;i++){
list.add(
ListTile(
title: Text("我是一个${i+1}列表")
)
);
}
return list;
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
padding: EdgeInsets.all(10),
child: ListView(
children: this._getData(),
),
);
}
}
案例展示效果:
// HomeContent 组件
class HomeContent extends StatelessWidget{
// 私有方法 _getData 生成列表
List<Widget> _getData(){
// List list = new List();
List listData = [{
"title":"标题内容1",
"author":"作者名称1",
"imageUrl": "http://pic.qqtn.com/up/2020-1/2020011418121854630.jpg"
},{
"title":"标题内容2",
"author":"作者名称2",
"imageUrl": "http://pic4.zhimg.com/50/v2-d4fe5d28374d778e642d30f8019e2f9d_hd.jpg"
},{
"title":"标题内容3",
"author":"作者名称3",
"imageUrl": "https://b-ssl.duitang.com/uploads/item/201505/04/20150504234255_f2Gce.jpeg"
},{
"title":"标题内容4",
"author":"作者名称4",
"imageUrl": "https://b-ssl.duitang.com/uploads/item/201608/31/20160831175900_xUFNM.jpeg"
}];
var tempList = listData.map((v){
return ListTile(
leading: Image.network(v['imageUrl']),
title: Text(v['title']),
subtitle: Text(v['author']),
);
});
return tempList.toList();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
padding: EdgeInsets.all(10),
child: ListView(
children: this._getData(),
),
);
}
}
案例预览效果:
ListView.builder
创建动态列表// HomeContent 组件
class HomeContent extends StatelessWidget{
List list = new List();
HomeContent(){
for(int i=0;i<20;i++){
this.list.add("我是一个${i+1}列表");
}
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
padding: EdgeInsets.all(10),
child: ListView.builder(
itemCount: this.list.length,
itemBuilder: (item, index){
return ListTile(
title: Text(this.list[index])
);
}
)
);
}
}