需要Pageview保活的原因是,切换page时,每次都会调用init方法,会重新请求网络数据。
1:普通StatefulWidget中实现保活
只需要实现AutomaticKeepAliveClientMixin
:
class _TestPageState extends State<testPage> with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
/// 实现super方法
super.build(context);
return Container();
}
/// 返回true
@override
bool get wantKeepAlive => true;
}
2:使用Fish_redux + pageView
需要将该page用KeepWidget 包裹起来使用。
import 'package:flutter/material.dart';
/// 保持状态的包裹类
class KeepAliveWidget extends StatefulWidget {
final Widget child;
const KeepAliveWidget(this.child);
@override
State<StatefulWidget> createState() => _KeepAliveState();
}
class _KeepAliveState extends State<KeepAliveWidget>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
super.build(context);
return widget.child;
}
}
Widget keepAliveWrapper(Widget child) => KeepAliveWidget(child);
3:Test:
PageView.builder(
itemCount: homeTabs.length,
controller: pageController,
// physics: const ClampingScrollPhysics(),
onPageChanged: (index) {
state.tabController.animateTo(index);
},
itemBuilder: (context, index) {
if(index == 0){
return keepAliveWrapper(widgetA);
}else{
return keepAliveWrapper(widgetB);
}
})
网友评论