列表组件也是一个经常使用的组件。在看ListView组件之前先了解一下ListTile组件。
ListTile通常用于填充 ListView。
/**
* ListTile组件
*/
class ListTileWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
//标题
title: Text("House"),
//副标题
subtitle: Text("A House"),
//前置图标
leading: Icon(Icons.home),
//后置图标
trailing: Icon(Icons.keyboard_arrow_right),
//内容内边距
contentPadding: EdgeInsets.all(5.0),
//是否选中状态
selected: true);
}
}
实现效果如下图:
/**
* 列表组件
*/
class ListViewWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
//列表组件
return ListView(children: [
ListTile(
leading: Icon(Icons.access_time), title: Text('access_time')),
ListTile(
leading: Icon(Icons.account_balance), title: Text('account_balance')),
]);
}
}
实现效果如下图:
使用ListView,然后在他的内部children中,使用了widget数组,因为是一个列表,所以它接受一个数组,然后有使用了listTite组件,在组件中放置了前置图标和文字。
横向列表如何使用。其实还是使用ListView组件,只是在ListView组件里加一个ScrollDirection属性。
/**
* 横向列表
*/
class ListViewHorizontalWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
//列表组件
return ListView(
//滚动方向
scrollDirection: Axis.horizontal,
children: [
Container(
width: 180.0,
color: Colors.lightBlue,
),
Container(
width: 180.0,
color: Colors.amber,
),
Container(
width: 180.0,
color: Colors.deepOrange,
),
Container(
width: 180.0,
color: Colors.deepPurpleAccent,
),
],
);
}
}
实现效果如下图:
在实际开发中,静态的列表使用的非常少。最常用的是动态列表,比如数据从后台读取过来,然后存入一个变量数组里,然后以数组的内容循环出一个列表。
List是Dart的集合类型之一,它的声明有几种方式:
void main() =>
runApp(DynamicListApp(items: List.generate(20, (i) => "Item ${i}")));
/**
* 动态列表组件
*/
class DynamicListApp extends StatelessWidget {
final List items;
DynamicListApp({Key key, @required this.items}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "DynamicList",
home: Scaffold(
appBar: AppBar(
title: Text("DynamicList"),
),
body: Center(
child: ListView.builder(
itemCount: this.items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text("${items[index]}"),
);
})),
),
);
}
}
实现效果如下图:
说明: