应该是在widget树发生变化的时候,widget重新出现的时候发生了build,在绝大多数情况下我们不希望这种事情发生,下面提供一个非常简单的解决办法。
通常我们会使用BottomNavigationBar的onTap: (int index) 方法,然后调用setState去更新显示的widget,其实问题在于我们将widget给替换掉了,所以出现的时候重新build并不奇怪,所以就需要一个什么东西将这些widget保存下来,然后按需显示。
一个最简单的方法就是用IndexedStack,这个widget可以存储widget并且保存它们的状态:
return Scaffold(
body: IndexedStack(
index: _currentIndex,
children: widget.bodys,
),
//避免按钮被重新build
bottomNavigationBar: BottomNavigationBar(
//此处省略了一万行
index就是要显示的widget的index,children就是要显示的widget集合
大家可以试一下,完美搞定。
网友评论