美文网首页
Flutter - Fish_redux + PageView页

Flutter - Fish_redux + PageView页

作者: 土豆骑士 | 来源:发表于2020-11-10 20:57 被阅读0次

需要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);
                  }
                })

相关文章

网友评论

      本文标题:Flutter - Fish_redux + PageView页

      本文链接:https://www.haomeiwen.com/subject/zcfsbktx.html