内存中的持久Flutter小部件

时间:2018-11-25 16:21:10

标签: dart flutter flutter-layout

我在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

1 个答案:

答案 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 做同样的事情