在 Flutter 中,实现滚动效果主要通过以下几种常用组件:
1. SingleChildScrollView
适用于内容较少、一次性加载的场景,支持垂直或水平滚动。
SingleChildScrollView(
child: Column(
children: List.generate(20, (index) => Text('Item $index')),
),
)
2. ListView
适用于可滚动的列表,支持多种构造方式:
- ListView.builder(推荐用于长列表,按需渲染):
ListView.builder(
itemCount: 100,
itemBuilder: (context, index) => ListTile(title: Text('Item $index')),
)
- ListView.separated(带分隔符):
ListView.separated(
itemCount: 50,
separatorBuilder: (context, index) => Divider(),
itemBuilder: (context, index) => ListTile(title: Text('Item $index')),
)
3. GridView
用于网格布局滚动:
GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemCount: 20,
itemBuilder: (context, index) => Card(child: Center(child: Text('Item $index'))),
)
4. CustomScrollView + Slivers
用于复杂滚动效果,可组合多个滑动组件(如 SliverList、SliverGrid):
CustomScrollView(
slivers: [
SliverAppBar(title: Text('Scroll Demo')),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => ListTile(title: Text('Item $index')),
childCount: 30,
),
),
],
)
5. 滚动控制器(ScrollController)
监听或控制滚动位置:
final controller = ScrollController();
ListView.builder(
controller: controller,
itemBuilder: (context, index) => Text('Item $index'),
);
// 滚动到指定位置
controller.animateTo(200, duration: Duration(seconds: 1), curve: Curves.ease);
注意事项:
- 性能优化:长列表优先使用
ListView.builder 或 GridView.builder。
- 嵌套滚动:避免在滚动组件内嵌套另一个滚动组件,必要时使用
CustomScrollView。
根据需求选择合适的组件即可快速实现滚动效果。