Flutter 底部导航栏未在颤振中切换选项卡

Flutter 底部导航栏未在颤振中切换选项卡,flutter,navigation,Flutter,Navigation,我想在颤振中使用奇特的底部导航。当我在选项卡之间切换时,它仅在导航栏上显示选项卡切换,但正文没有切换。当我切换时,它不会显示其他选项卡。 这是我的密码 return Scaffold( body: _getPage(currentPage), bottomNavigationBar: FancyBottomNavigation( key: bottomNavigationKey, tabs: [ TabData(iconD

我想在颤振中使用奇特的底部导航。当我在选项卡之间切换时,它仅在导航栏上显示选项卡切换,但正文没有切换。当我切换时,它不会显示其他选项卡。 这是我的密码

return Scaffold(
  body: _getPage(currentPage),
   bottomNavigationBar: FancyBottomNavigation(
          key: bottomNavigationKey,
          tabs: [
            TabData(iconData: Icons.home,title: 'Home'),
            TabData(iconData: Icons.search, title: 'Search'),
            TabData(iconData: Icons.person, title: 'Profile'),
          ],
          onTabChangedListener:   (position){
            setState(() {
              currentPage = position;
              final FancyBottomNavigationState fState =
                  bottomNavigationKey.currentState;
              fState.setPage(position);
              print('currentPage = $currentPage');
            });
          },
        )
);

_getPage(int page){
  switch(page) {
    case 0:
      return Page1();
    case 1:
      return Search();
    case 2:
      return Profile();
  }
}

你在这里不需要通灵球。只需在setState中设置
currentPage
值就足够了

开发人员Nathan Withers写道,key prop默认为null,仅用于选项卡的编程选择。此特殊用例仅在您希望通过不单击实际按钮来更改选项卡时才相关。您不需要此功能。您可以在第48到50行查看钥匙道具的实际用例

还要检查
索引堆栈是否适合您。它保存页面状态。您的_getPage()方法在每个交换机上销毁并构建每个新页面

在这个例子中,我将所有内容放在一起:

class _HomePageState extends State<HomePage> {
  int _currentPage = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        top: false,
        child: IndexedStack(
          index: _currentPage,
          children: [StartView(), AllServicesView()],
        ),
      ),
      bottomNavigationBar: FancyBottomNavigation(
        tabs: [
          TabData(iconData: Icons.home,title: 'Home'),
          TabData(iconData: Icons.search, title: 'Search'),
        ],
        onTabChangedListener: (position){
          setState(() {
            _currentPage = position;
            print('currentPage = $_currentPage');
          });
        },
      )
    );
  }
class\u HomePageState扩展状态{
int _currentPage=0;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
上图:错,
子:IndexedStack(
索引:_当前页面,
子项:[StartView(),AllServicesView()],
),
),
底部导航栏:FancyBottomNavigation(
选项卡:[
TabData(iconData:Icons.home,标题:“home”),
TabData(iconData:Icons.search,标题:“search”),
],
onTabChangedListener:(位置){
设置状态(){
_当前页面=位置;
打印('currentPage=$_currentPage');
});
},
)
);
}

当它不工作时?1.交换或单击tab@jitsm555没有处理任何事件(交换或单击选项卡)。当我单击选项卡或滑动选项卡时显示相同的页面。嘿@Nicolas Klein,谢谢你的建议。但是,这也不起作用。仍然是相同的问题。没有移动。它显示错误“E/flatter”(5618):[错误:flatter/lib/ui/ui_dart_state.cc(166)]未处理的异常:在dispose()之后调用setState():FancyBottomNavigationState#b25d9(生命周期状态:不存在,未装入)”。如何装入小部件?