我试图在应用程序的初始页面中构建一个底部导航栏,我在这个底部栏中添加了几个标签,用户应该能够点击其中一个来访问不同的标签。但栏只用于导航到其他页面。在其中一个页面中,我添加了一个card
,用户应该点击它们来详细页面。然而,当它在详细信息页面中时,导航栏消失了。我想知道如何保持我的导航栏在应用程序中始终可见。
下面的代码是关于我如何在我的主页中建立底部栏的
......
int currentTab = 0; // to keep track of active tab index
final List<Widget> screens = [
recommend(),
optional(),
backtest(),
machine(),
]; // to store tab views
Widget currentScreen = recommend(); // initial pages
final PageStorageBucket bucket = PageStorageBucket();
......
bottomNavigationBar: BottomAppBar(
color: Colors.white,
elevation: 0.2,
shape: CircularNotchedRectangle(),
notchMargin: 10,
child: Container(
height: 60,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
MaterialButton(
minWidth: 40,
onPressed: (){
setState(() {
currentScreen = recommend();
currentTab = 0;
});
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
Icons.format_line_spacing,
color: currentTab == 0 ? Colors.redAccent : Colors.grey,),
Text(
'',
style: TextStyle(
color: currentTab == 0 ? Colors.redAccent : Colors.grey, ),)
],),
),
MaterialButton(
minWidth: 40,
onPressed: (){
setState(() {
currentScreen = optional();
currentTab = 1;
});
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
Icons.offline_pin,
color: currentTab == 1 ? Colors.redAccent : Colors.grey,),
Text(
'',
style: TextStyle(
color: currentTab == 1 ? Colors.redAccent : Colors.grey, ),)
],),
),
],
),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
MaterialButton(
minWidth: 40,
onPressed: (){
setState(() {
currentScreen = backtest();
currentTab = 2;
});
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
Icons.replay,
color: currentTab == 2 ? Colors.redAccent : Colors.grey,),
Text(
'',
style: TextStyle(
color: currentTab == 2 ? Colors.redAccent : Colors.grey, ),)
],),
),
MaterialButton(
minWidth: 40,
onPressed: (){
setState(() {
currentScreen = machine();
currentTab = 3;
});
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
Icons.android,
color: currentTab == 3 ? Colors.redAccent : Colors.grey,),
Text(
'',
style: TextStyle(
color: currentTab == 3 ? Colors.redAccent : Colors.grey, ),)
],),
),
],
)
],
),
),
),
下面的代码是我如何导航到详细页面的,
return Container(
child: Card(
child: new InkWell(
onTap: (){
Navigator.push(context,
MaterialPageRoute(builder: (context) => stockDetail()));
},
......
我正在寻找一种方法来解决我现有的代码的基础上的问题,但我会很感激,如果有任何其他有效的方法来解决它。
4条答案
按热度按时间lpwwtiir1#
使用此插件Presistant_bottom_nav_bar .基于问题,你需要在每个www.example.com底部导航栏pages.you可以禁用底部导航在特定的屏幕结帐上面的链接
它非常好的插件在我看来.结帐导航风格在这个link.you可以改变desgin底部navbar navBarStyle:NavBarStyle.style9,只需将style9更改为插件提供的任何数字。我相信其中有15个可用
您可以使用您的自定义图标,而不是默认图标,也不是这个CupertinoColors.systemPurple您也可以使用Colors.red这种让我知道如果它的作品
vkc1a9a22#
我遇到了类似的问题。我从你的查询中了解到的是,不同的页面被调用在不同的标签(在底部导航栏),但应用程序栏/底部导航栏本身是不可见的。
我建议您创建另一个dart文件。为方便起见,我们称之为
blank.dart
。在这个blank.dart中,你为底部的导航栏(你已经写好了)编写代码,并调用这个blank.dart中所有不同的页面。所以基本上,导航栏将与这个blank.dart中调用的所有其他页面相同,你可以将它理解为blank.dart是父控件,所有其他不同的标签是其子控件,因此父控件可以导航到其子控件。你可以在我的GitHub上查看类似的解决方案,网址是lib/screens/blank.dart:http://github.com/samflab/fitility
wydwbb8l3#
你可以通过在main.dart中添加BottomNavigationBar来解决这个问题,然后根据BottomNavigationBaritem的currentIndex,你可以在scaffold中更改屏幕(body:anyScreenAccordingToindex)。例如,如果currentIndex==2,那么body:secondPage()
1qczuiv04#
当您使用GoRouter(https://pub.dev/packages/go_router)作为导航时,这非常容易。它有一个ShellRoute选项--你可以用这个Shell Package 那些你想拥有持久导航栏(或者任何其他元素,比如app bar和其他元素)的路由。https://www.youtube.com/watch?v=b6Z885Z46cU
示例: