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;
}
不起作用。仍然重新创建。不起作用。仍然重现。