State 混入 AutomaticKeepAliveClientMixin,同时 wantKeepAlive 返回 true。

这样使用 TabView 或者 PageView 切换页面时,ListView 等 Stateful 控件的状态(如滚动位置)都会保留下来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class _PageListView extends State<PageListView>
with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
super.build(context);
return ListView.builder(
padding: EdgeInsets.only(bottom: 10),
itemCount: 100,
itemExtent: 40,
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return Container(
color: Colors.black12,
child: Text(' 这是第 $index 行'),
);
});
}

@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;