我正在创建一个带有 Scaffold 的应用程序,其中包含:
FutureBuilder在创建身体PageView数据加载时,作为其子。BottomNavigationBar,与同步PageView一个更直观的导航。功能方面,一切正常。我可以在页面之间向左和向右滑动,并且在 中currentIndex正确更新BottomNavigationBar,如果我点击BottomNavigationBar元素,PageView它将按预期动画到正确的页面。
然而......在页面之间切换时性能真的很差,即使在配置文件模式下也是如此。
大量调查之后,我确认滞后只存在,如果我更新currentIndex的BottomNavigationBar。
如果我不更新BottomNavigationBar,则在页面之间切换时,无论是在 上滑动PageView还是在点击BottomNavigationBar元素本身时,动画都会保持非常流畅。
我还可以确认,在使用setState和使用Provider. 我真的希望这只是setState方法效率低下......但没有运气:(
对于setState实施,这就是我正在做的事情:
在PageView:
onPageChanged: (page) {
setState(() {
_selectedIndex = page;
});
}
Run Code Online (Sandbox Code Playgroud)
在底部栏导航上:
onTap: _onTappedBar,
currentIndex: _selectedIndex
Run Code Online (Sandbox Code Playgroud)
及以下:
void _onTappedBar(int value) {
_pageController.animateToPage(value, duration: Duration(milliseconds: 500), curve: Curves.ease); …Run Code Online (Sandbox Code Playgroud)