123456789101112131415161718192021222324252627282930313233343536 |
- import 'package:flutter/material.dart';
- /// 保持页面或列表的缓存 -可用于列表和PageView的子页面
- 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;
- }
|