import 'package:flutter/material.dart'; /// _TabPageContainer 实现tab页面懒加载及状态保存 class TabPageContainer extends StatefulWidget { final List<Widget> children; final int currentIndex; const TabPageContainer( {Key? key, required this.children, required this.currentIndex}) : assert(currentIndex >= 0), super(key: key); @override State<TabPageContainer> createState() => _TabPageContainerState(); } class _TabPageContainerState extends State<TabPageContainer> { final initMap = <int, bool>{}; @override void initState() { super.initState(); initMap[0] = true; } List<Widget> createChildren() { final result = <Widget>[]; for (var i = 0; i < widget.children.length; ++i) { final w = widget.children[i]; if (initMap[i] == true) { result.add(w); } else { result.add(Container()); } } return result; } @override Widget build(BuildContext context) { return IndexedStack( index: widget.currentIndex, children: createChildren(), ); } @override void didUpdateWidget(covariant TabPageContainer oldWidget) { super.didUpdateWidget(oldWidget); if (oldWidget.currentIndex != widget.currentIndex) { initMap[widget.currentIndex] = true; setState(() {}); } } }