场景如下:
1、切换Tab后、页面每次都会刷新,重新加载;
2、ListView中的某个条目设置为头布局,不希望被回收;
使用 AutomaticKeepAliveClientMixin ;
例:给该界面的State 和 AutomaticKeepAliveClientMixin 关联一起:
class _ListsPageState extends State<ListsPage> with AutomaticKeepAliveClientMixin {}
再重写 wantKeepAlive 方法:
@override bool get wantKeepAlive => true;
这样该Widget就不会被回收了;
完整代码:
class ListsPage extends StatefulWidget {
ListsPage({Key key}) : super(key: key);
@override
_ListsPageState createState() {
return _ListsPageState();
}
}
class _ListsPageState extends State<ListsPage>
with AutomaticKeepAliveClientMixin {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);
return Container(
child: CustomScrollView(
slivers: <Widget>[
Image200Page(),
MeiziGridPage(),
//List
SliverFixedExtentList(
itemExtent: 50.0,
delegate: new SliverChildBuilderDelegate(
(BuildContext context, int index) {
//创建列表项
return new Container(
alignment: Alignment.center,
child: new Text('加载完成'),
);
}, childCount: 1
),
),
],
),
);
}
@override
bool get wantKeepAlive => true;
}