我在Flutter中创建了自己的简单底部导航栏实现。按下选项卡时,Flutter当前正在重新创建非期望的窗口小部件(每次都会调用initState()
)。
我希望将小部件保留在内存中,因此,如果它们已经创建,则直接将其直接弹出。
主窗口小部件
class _MainRootScreenState extends State<MainRootScreen> {
int _selectedIndex = 0;
List<Widget> _screens;
@override
void initState() {
// load pages
_screens = [
PageOne(),
PageTwo(),
PageThree()
];
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _screens[_selectedIndex],
bottomNavigationBar: _buildBottomTabBar(context)
);
}
}
因此,_selectedIndex
更新时,将重新创建所选页面。
我尝试在没有运气的页面上使用AutomaticKeepAliveClientMixin
。
答案 0 :(得分:-1)
如果您不希望在单击选项卡按钮时重新构建窗口小部件/页面。您只需要遵循以下代码
只需将State<PageOne> with AutomaticKeepAliveClientMixin<PageOne>
添加到状态类中即可。之后,您需要重写一个名为wantKeepAlive
的方法,并将wantKeepAlive
设为true。
默认情况下,wantKeepAlive
为假,因为它可以节省我们的内存。
PageOne
class PageOne extends StatefulWidget {
@override
_PageOneState createState() => _PageOneState();
}
class _PageOneState extends State<PageOne> with AutomaticKeepAliveClientMixin<PageOne> {
// Your code are here
@override
bool get wantKeepAlive => true;
}
从 pageTwo 和 PageThree 做同样的事情