我一直在使用Flutter中的BottomNavigationBar,但我无法在BottomNavigationBar的onTap回调之外以编程方式选择Tab。
使用onTap回调的代码,它正在工作:
return new BottomNavigationBar(
items: <BottomNavigationBarItem>[
_bottomNavigationItem(Icons.account_circle, DrawerTitles.CONTACTS),
_bottomNavigationItem(Icons.delete, DrawerTitles.DELETED_CONTACTS),
_bottomNavigationItem(Icons.list, DrawerTitles.LOGS),
],
onTap: (int index) {
setState(() {
navigationIndex = index;
switch (navigationIndex) {
case 0:
handleBottomNavigationBarClicks(DrawerTitles.CONTACTS);
break;
case 1:
handleBottomNavigationBarClicks(DrawerTitles.DELETED_CONTACTS);
break;
case 2:
handleBottomNavigationBarClicks(DrawerTitles.LOGS);
break;
}
});
},
currentIndex: navigationIndex,
fixedColor: Colors.blue[400],
type: BottomNavigationBarType.fixed,
);
字符串
但我想更改onTap回调之外的选项卡。
我尝试在onTap回调之外更改BottomNavigatioBar使用的索引,但没有成功。
以下是我尝试过的:
void changeTabs(int tabIndex) {
setState(() {
navigationIndex = tabIndex;
});}
型
下面是一个gist的代码。
有没有什么方法可以改变标签?
7条答案
按热度按时间7d7tgy0s1#
您可以通过使用GlobalKey获取这个BottomNavigationBar小部件。通过此GlobalKey,您可以处理此小部件。Here is an gist for the code
在这里分配一个GlobalKey
字符串
然后把钥匙放到你的底部导航栏
型
现在,如果必须使用CurvedNavigationBar,您可以调用widget的方法并使用CurvedNavigationBar而不是BottomNavigationBar。
型
vvppvyoh2#
这里有一个完整的例子,说明如何实现你想要的东西。
字符串
每当你想改变一个标签,调用
changeTab(YOUR_TAB_INDEX)
czfnxgou3#
谢谢你从@HuyHoàng为flutter版本2+我使用这个:
字符串
然后将此键分配给BottomNavigationBar,然后可以访问底部,如下所示:
型
wvyml7n54#
下面是回答上述第一个问题的完整示例。代码是从上面修改的。注意回调方法传递给第3页构造函数。
字符串
ua4mk5z45#
如果你想从一个小部件中更改标签,你可以这样做:
假设这是您要更改当前活动选项卡的小部件:
字符串
现在,在包含标签栏的小部件(BottomNavigationBar)中:
型
ttp71kqs6#
如果有人有同样的问题,我的不仅仅是得到下一个标签,但也允许切换动画。
字符串
曲线导航栏
型
那么在你的代码中
型
u91tlkcl7#
另一个工作解决方案在这里为CupertinoApp。它正在为我的应用程序要求工作。
这也是回答“有没有办法改变标签从孩子?“,因为我们可以在任何子节点中传递控制器,并且我们可以更改选项卡索引。
字符串