ListView 的基本用法
ListView 是 Flutter 中用于展示一组连续视图元素的控件,支持垂直或水平方向滚动。适用于需要展示大量数据的场景,如通信录、商家列表等。
默认构造函数
适用于少量子 Widget 的场景,一次性创建所有子 Widget,性能较差。
示例代码:
ListView(
children: <Widget>[
ListTile(leading: Icon(Icons.map), title: Text('Map')),
ListTile(leading: Icon(Icons.mail), title: Text('Mail')),
ListTile(leading: Icon(Icons.message), title: Text('Message')),
]
);
水平滚动 ListView
通过设置 scrollDirection: Axis.horizontal 实现水平滚动。
示例代码:
ListView(
scrollDirection: Axis.horizontal,
itemExtent: 140,
children: <Widget>[
Container(color: Colors.black),
Container(color: Colors.red),
Container(color: Colors.blue),
]
);
ListView.builder 构造函数
适用于大量子 Widget 的场景,动态创建子 Widget,提升性能。
关键参数:
itemBuilder:子 Widget 的创建方法。itemCount:列表项数量(可选,若为 null 则为无限列表)。
示例代码:
ListView.builder(
itemCount: 100,
itemExtent: 50.0,
itemBuilder: (context, index) => ListTile(
title: Text("title $index"),
subtitle: Text("body $index")
)
);
性能优化建议
对于定高的列表项,建议设置 itemExtent,避免动态计算高度带来的性能损耗。
ListView.separated 构造函数
支持自定义分割线,通过 separatorBuilder 动态设置分割线样式。
示例代码:
ListView.separated(
itemCount: 100,
separatorBuilder: (context, index) =>
index % 2 == 0 ? Divider(color: Colors.lvse) : Divider(color: Colors.red),
itemBuilder: (context, index) => ListTile(
title: Text("title $index"),
subtitle: Text("body $index")
)
);
CustomScrollView 的使用
用于解决多 ListView 嵌套时滑动效果不一致的问题。
Sliver 的概念
将独立的可滚动控件(如 SliverList、SliverAppBar)统一管理,确保滑动效果一致。
滚动视差示例
通过 CustomScrollView 实现多层背景以不同速度移动的视差效果。
示例代码:
CustomScrollView(
slivers: <Widget>[
SliverAppBar(title: Text('视差滚动示例')),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => ListTile(title: Text("Item $index")),
childCount: 50
)
)
]
);
总结
- ListView:适用于少量子 Widget,简单易用。
- ListView.builder:适用于大量子 Widget,动态创建提升性能。
- ListView.separated:支持自定义分割线。
- CustomScrollView:统一管理多个可滚动控件,实现复杂交互效果。
















