
到目前为止,你已经掌握了:
但是在实际项目中,列表数据量可能很大,如果处理不当会出现:
本篇我们将学习 Flutter 高级列表与滚动优化技巧。
ListView.builder(
itemCount: ,
itemBuilder: (context, index) {
return ListTile(
title: Text('条目 $index'),
);
},
)
📌 说明:
ListView.builder → 按需构建,性能比 ListView + children 高builderListTile(
key: ValueKey(index),
title: Text('条目 $index'),
)
ScrollController _controller = ScrollController();
_controller.addListener(() {
if (_controller.position.pixels == _controller.position.maxScrollExtent) {
// 到底部,加载更多数据
}
});
📌 技巧:
Sliver 系列组件是 可滚动区域的可伸缩、可组合布局。
CustomScrollView(
slivers: [
SliverAppBar(
pinned: true,
expandedHeight: 200,
flexibleSpace: FlexibleSpaceBar(
title: Text('Sliver 示例'),
background: Image.asset(
'assets/images/flutter_logo.png',
fit: BoxFit.cover,
),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => ListTile(title: Text('条目 $index')),
childCount: 50,
),
),
],
)
📌 功能解析:
SliverAppBar → 可伸缩 AppBarSliverList → 高性能长列表SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 10,
crossAxisSpacing: 10,
childAspectRatio: 1,
),
delegate: SliverChildBuilderDelegate(
(context, index) => Container(
color: Colors.blue[100 * ((index % ) + )],
child: Center(child: Text('Item $index')),
),
childCount: 20,
),
)
📌 功能:
ScrollController _scrollController = ScrollController();
_scrollController.addListener(() {
print('当前滚动位置: ${_scrollController.position.pixels}');
});
cached_network_imageclass SliverListPage extends StatefulWidget {
@override
_SliverListPageState createState() => _SliverListPageState();
}
class _SliverListPageState extends State<SliverListPage> {
final ScrollController _controller = ScrollController();
List<int> _items = List.generate(20, (index) => index);
@override
void initState() {
super.initState();
_controller.addListener(() {
if (_controller.position.pixels == _controller.position.maxScrollExtent) {
// 加载更多
setState(() {
_items.addAll(List.generate(, (index) => _items.length + index));
});
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
controller: _controller,
slivers: [
SliverAppBar(
pinned: true,
expandedHeight: 150,
flexibleSpace: FlexibleSpaceBar(title: Text('Sliver分页列表')),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return ListTile(title: Text('条目 ${_items[index]}'));
},
childCount: _items.length,
),
),
],
),
);
}
}
📌 功能总结:
❌ ListView / Column 直接嵌套长列表 → 滚动冲突 ❌ SliverChildListDelegate / children 太多 → 性能下降 ❌ 不释放 ScrollController → 内存泄漏 ❌ itemBuilder 内做复杂计算 → 卡顿
📌 建议:
你已经学会:
📌 到这里为止:
你的 App 已经可以显示大量数据并保持流畅滚动 ✅
Sliver + CustomScrollView 高性能长列表 + 网格布局 分页加载 + 滚动监听 App 列表性能与交互优化
🔜 下一篇预告
《Flutter 零基础入门(四十七):Flutter 插件与第三方库使用 —— 扩展 App 功能实战》
下一篇我们将学习:
🚀 让你的 App 从入门到具备实用功能能力