1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import 'package:flutter/material.dart';
- /// 保持页面或列表的缓存 -可用于列表和PageView的子页面
- // ignore: slash_for_doc_comments
- /** 使用示例
- *
- @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 KeepAliveWrapper extends StatefulWidget {
- const KeepAliveWrapper({
- Key? key,
- this.keepAlive = true,
- required this.child,
- }) : super(key: key);
- final bool keepAlive;
- final Widget child;
- @override
- _KeepAliveWrapperState createState() => _KeepAliveWrapperState();
- }
- class _KeepAliveWrapperState extends State<KeepAliveWrapper>
- with AutomaticKeepAliveClientMixin {
- @override
- Widget build(BuildContext context) {
- super.build(context);
- return widget.child;
- }
- @override
- void didUpdateWidget(covariant KeepAliveWrapper oldWidget) {
- if(oldWidget.keepAlive != widget.keepAlive) {
- // keepAlive 状态需要更新,实现在 AutomaticKeepAliveClientMixin 中
- updateKeepAlive();
- }
- super.didUpdateWidget(oldWidget);
- }
- @override
- bool get wantKeepAlive => widget.keepAlive;
- }
|