当前位置: 首页 > news >正文

Flutter Listview 缓存item滑动后不进行重新渲染

使用KeepAliveWrapper包裹:
KeepAliveWrapper源码:

class KeepAliveWrapper extends StatefulWidget {const KeepAliveWrapper({Key? key, @required this.child, this.keepAlive = true}): super(key: key);final Widget? child;final bool keepAlive;@overrideState<KeepAliveWrapper> createState() => _KeepAliveWrapperState();
}class _KeepAliveWrapperState extends State<KeepAliveWrapper>with AutomaticKeepAliveClientMixin {@overrideWidget build(BuildContext context) {return widget.child!;}@overridebool get wantKeepAlive => widget.keepAlive;@overridevoid didUpdateWidget(covariant KeepAliveWrapper oldWidget) {if (oldWidget.keepAlive != widget.keepAlive) {// keepAlive 状态需要更新,实现在 AutomaticKeepAliveClientMixin 中updateKeepAlive();}super.didUpdateWidget(oldWidget);}
}

使用示例:

@override
Widget build(BuildContext context) {var children = <Widget>[];for (int i = 0; i < 6; ++i) {//只需要用 KeepAliveWrapper 包装一下即可children.add(KeepAliveWrapper(child:Page( text: '$i'));}return PageView(children: children);
}

测试下:

class KeepAliveDemo extends StatelessWidget {const KeepAliveDemo({Key? key,}) : super(key: key);@overrideWidget build(BuildContext context) {return PageView.builder(itemCount: 5,itemBuilder: (BuildContext ctx, int index) {return KeepAliveWrapper(child: PageItem(text: "$index"),keepAlive: true,);},);}
}class PageItem extends StatelessWidget {PageItem({this.text});final String? text;@overrideWidget build(BuildContext context) {print("flutter build ${text}");return Center(child: Text(text!, textScaleFactor: 5.0));}
}

运行发现,keepAlive为true时每个Item都缓存了,为false时,每个Item都会重新创建,OK。

转自:【致程序猿】Flutter 之 可滚动组件子项缓存 KeepAlive_keepalivewrapper-CSDN博客


http://www.mrgr.cn/news/5918.html

相关文章:

  • SQL - 索引
  • Thinkphp6 反序列化漏洞分析
  • 【数学建模备赛】Ep06:多元线性回归分析
  • 80页WORD方案深入了解大数据治理+大数据资产管理+数据运营
  • 阿里云ubuntu系统安装jdk + tomcat
  • 单例模式 详解
  • 128. 最长连续序列
  • 科技大通缩
  • 框架——MyBatis(!!!MyBatis 环境搭建步骤)
  • JAVA设计模式之【单例模式】
  • 一文掌握 Web 测试:功能、界面、兼容与安全的综合测试指南!
  • 【数据分析】数据的离中趋势之一 - 极差、分位距、平均差
  • Jenkins配置SSH凭据
  • CSS的:required和:optional伪类:增强表单字段的视觉识别
  • 【设计模式】建造者模式和单例模式
  • Redis笔记-分布式存储方案中哨兵模式配置
  • oracle数据库缓存区高速缓存区
  • Java导出分类到Excel
  • 从HTTP到HTTPS:SSL加密如何重塑互联网安全格局
  • 机器学习:决策树回归树实现