Dart 如何在flatter中使用BottomNavigationBar保持小部件的状态?

Dart 如何在flatter中使用BottomNavigationBar保持小部件的状态?,dart,flutter,flutter-navigation,Dart,Flutter,Flutter Navigation,我有一个底部导航栏,特别是一个。我嵌套了MaterialApps,为内部小部件提供了一个新的Navigator。但是,当我切换选项卡时,底部导航栏中的每个小部件都会重建。这对我来说不好,因为我想让小部件保持相同的状态。如何实现这一点?我认为使用cupertinobsaffold&cupertinotabbar&cupertinobview可以很容易地解决这个问题 如有需要,请阅读更多有关该网站的信息: 官方示例: 这是我的代码,它按照您希望的方式工作。(更改选项卡时不重建)您可以将其转换为您的:

我有一个
底部导航栏
,特别是一个。我嵌套了
MaterialApp
s,为内部小部件提供了一个新的
Navigator
。但是,当我切换选项卡时,底部导航栏中的每个小部件都会重建。这对我来说不好,因为我想让小部件保持相同的状态。如何实现这一点?

我认为使用
cupertinobsaffold
&
cupertinotabbar
&
cupertinobview
可以很容易地解决这个问题

如有需要,请阅读更多有关该网站的信息:

官方示例:

这是我的代码,它按照您希望的方式工作。(更改选项卡时不重建)您可以将其转换为您的:

import'包装:flift/cupertino.dart'

CupertinoTabScaffold(
          tabBar: CupertinoTabBar(items: [
            BottomNavigationBarItem(
                icon: Icon(Icons.explore), title: Text('Explore')),
            BottomNavigationBarItem(
                icon: Icon(Icons.card_travel), title: Text('Adventure')),
            BottomNavigationBarItem(
                icon: Icon(Icons.search), title: Text('Search')),
            BottomNavigationBarItem(
                icon: Icon(Icons.collections_bookmark),
                title: Text('Bookmarks')),
            BottomNavigationBarItem(
                icon: Icon(Icons.person), title: Text('Profile')),
          ]),
          tabBuilder: (context, index) {
            return CupertinoTabView(
              builder: (context) {
                switch (index) {
                  case 0:
                    return ExplorePage();
                    break;
                  case 1:
                    return AdventurePage();
                    break;
                  case 2:
                    return SearchTourPage();
                    break;
                  case 3:
                    return Text('Bookmark Page');
                    break;
                  case 4:
                    return ProfilePage();
                    break;
                  default:
                    return SearchTourPage();
                }
              },
            );
          })

我认为使用
cupertinobsaffold
&
cupertinotabbar
&
cupertinobview
可以很容易地解决这个问题,因为它有这个功能

如有需要,请阅读更多有关该网站的信息:

官方示例:

这是我的代码,它按照您希望的方式工作。(更改选项卡时不重建)您可以将其转换为您的:

import'包装:flift/cupertino.dart'

CupertinoTabScaffold(
          tabBar: CupertinoTabBar(items: [
            BottomNavigationBarItem(
                icon: Icon(Icons.explore), title: Text('Explore')),
            BottomNavigationBarItem(
                icon: Icon(Icons.card_travel), title: Text('Adventure')),
            BottomNavigationBarItem(
                icon: Icon(Icons.search), title: Text('Search')),
            BottomNavigationBarItem(
                icon: Icon(Icons.collections_bookmark),
                title: Text('Bookmarks')),
            BottomNavigationBarItem(
                icon: Icon(Icons.person), title: Text('Profile')),
          ]),
          tabBuilder: (context, index) {
            return CupertinoTabView(
              builder: (context) {
                switch (index) {
                  case 0:
                    return ExplorePage();
                    break;
                  case 1:
                    return AdventurePage();
                    break;
                  case 2:
                    return SearchTourPage();
                    break;
                  case 3:
                    return Text('Bookmark Page');
                    break;
                  case 4:
                    return ProfilePage();
                    break;
                  default:
                    return SearchTourPage();
                }
              },
            );
          })
您可以使用强制不处置底部栏内容。但要想让这件事起作用,您可能必须将
底部导航栏
包装在一个
有状态小部件

我想可能有你想要的答案

例如:

class CustomBottomBar extends StatefulWidget {
  @override
  _CustomBottomBarState createState() => _CustomBottomBarState();
}

class _CustomBottomBarState extends State<CustomBottomBar> with AutomaticKeepAliveClientMixin {
  @override
  Widget build(BuildContext context) {
    return BubbleBottomBar(
      /*Your bottom bar code goes here*/
    );
  }

  // Setting it true will force the bottom bar to never be disposed. This could be dangerous.
  @override
  bool get wantKeepAlive => true;
}
类CustomBottomBar扩展StatefulWidget{
@凌驾
_CustomBottomBarState createState()=>\u CustomBottomBarState();
}
类_CustomBottomBarState使用AutomaticEpaLiveClientMixin扩展状态{
@凌驾
小部件构建(构建上下文){
返回气泡底柱(
/*你的底部条形码在这里*/
);
}
//如果将其设置为true,则将强制永远不要处理底部栏。这可能是危险的。
@凌驾
bool get wantKeepAlive=>true;
}
您可以使用来强制不处理底部栏内容。但要想让这件事起作用,您可能必须将
底部导航栏
包装在一个
有状态小部件

我想可能有你想要的答案

例如:

class CustomBottomBar extends StatefulWidget {
  @override
  _CustomBottomBarState createState() => _CustomBottomBarState();
}

class _CustomBottomBarState extends State<CustomBottomBar> with AutomaticKeepAliveClientMixin {
  @override
  Widget build(BuildContext context) {
    return BubbleBottomBar(
      /*Your bottom bar code goes here*/
    );
  }

  // Setting it true will force the bottom bar to never be disposed. This could be dangerous.
  @override
  bool get wantKeepAlive => true;
}
类CustomBottomBar扩展StatefulWidget{
@凌驾
_CustomBottomBarState createState()=>\u CustomBottomBarState();
}
类_CustomBottomBarState使用AutomaticEpaLiveClientMixin扩展状态{
@凌驾
小部件构建(构建上下文){
返回气泡底柱(
/*你的底部条形码在这里*/
);
}
//如果将其设置为true,则将强制永远不要处理底部栏。这可能是危险的。
@凌驾
bool get wantKeepAlive=>true;
}

不起作用。仍然重新创建。不起作用。仍然重现。