我是Flutter的新手。我有一个BottomNavigationBar
有4个项目。我想在按下时更改项目的图标。请帮忙。
这是我到目前为止所做的。
bottomNavigationBar : new BottomNavigationBar(
currentIndex: index,
onTap: (int index) {
setState(() {
this.index = index;
}
);
_navigateToScreens(index);
},
type: BottomNavigationBarType.fixed,
items: [
new BottomNavigationBarItem(
backgroundColor: Colors.white,
icon: new Image.asset('images/1.0x/icon1.png'),
title: new Text("Route1", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0))),
new BottomNavigationBarItem(
icon: new Image.asset('images/1.0x/icon2.png'),
title: new Text("Route2", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0))),
new BottomNavigationBarItem(
icon: new Image.asset('images/1.0x/icon3.png'),
title: new Text("Route3", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0),)),
new BottomNavigationBarItem(
icon: new Image.asset('images/1.0x/icon4.png'),
title: new Text("Route4", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0),))
]);
答案 0 :(得分:5)
您可以通过检查当前索引是否等于BottomNavigationBarItem
索引的索引来更改图标。
使用静态索引值的简单示例:
bottomNavigationBar : new BottomNavigationBar(
currentIndex: index,
onTap: (int index) {
setState(() {
this.index = index;
}
);
_navigateToScreens(index);
},
type: BottomNavigationBarType.fixed,
items: [
new BottomNavigationBarItem(
backgroundColor: Colors.white,
icon: index==0?new Image.asset('images/1.0x/icon1.png'):new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route1", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0))),
new BottomNavigationBarItem(
icon: index==1?new Image.asset('images/1.0x/icon2.png'):new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route2", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0))),
new BottomNavigationBarItem(
icon: index==2?new Image.asset('images/1.0x/icon3.png'):new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route3", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0),)),
new BottomNavigationBarItem(
icon: index==3?new Image.asset('images/1.0x/icon4.png'):new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route4", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0),))
])
希望有所帮助!
答案 1 :(得分:3)
如果有人在寻找一种解决方案来更改底部导航栏项目的颜色,则当“类型”设置为“移动”时,请尝试一下:
type: BottomNavigationBarType.shifting,
items: [
BottomNavigationBarItem(
activeIcon: Icon(
Icons.home,
color: Colors.grey[700],
),
icon: Icon(
Icons.home,
color: Colors.grey,
),
title: Text(
'Home',
style: TextStyle(
color: Colors.grey[600]
),
),
),
答案 2 :(得分:3)
2020
2种方式
目前最好的方法是:
selectedItemColor: Colors.white,
unselectedItemColor: Color(0xFFF434A50),
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: ImageIcon(AssetImage("assets/tab1.png"),),
title: Text('Agents'),
),
]
替代方式:
BottomNavigationBarItem(
activeIcon: Image.asset("assets/tab1.png",width: 15,color: Colors.white,),
icon: Image.asset("assets/tab1.png",width: 15,color: Color(0xFFF434A50),),
title: Text('Agents'),
),
activeIcon-所选标签
图标-取消选择标签
答案 3 :(得分:2)
如果要更改的只是BottomNavigationBarItem图标的颜色,则一个图标不需要具有两个具有不同颜色的图像。只要一个就足够了。
您可以使用ImageIcon从自定义图像中创建图标,并使用它的color属性使用currentIndex的值来更改图标颜色,如下所示:
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: currentTab,
onTap: (int index) {
setState(() {
currentTab = index;
currentPage = pages[index];
});
},
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: ImageIcon(
AssetImage("assets/img/tab1.png"),
color: currentTab == 0
? Colors.orange
: Colors.black,
),
title: Text('Title 1',
style: TextStyle(
fontSize: 10.0,
color: currentTab == 0
? Colors.orange
: Colors.black),
)
),
BottomNavigationBarItem(
icon: ImageIcon(
AssetImage("assets/img/tab2.png"),
color: currentTab == 1
? Colors.orange
: Colors.black,
),
title: Text('Title 2',
style: TextStyle(
fontSize: 10.0,
color: currentTab == 1
? Colors.orange
: Colors.black),)
),
BottomNavigationBarItem(
icon: ImageIcon(
AssetImage("assets/img/tab3.png"),
color: currentTab == 2
? Colors.orange
: Colors.black,
),
title: Text('Title 3',
style: TextStyle(
fontSize: 10.0,
color: currentTab == 2
? Colors.orange
: Colors.black),)
),
BottomNavigationBarItem(
icon: ImageIcon(
AssetImage("assets/img/tab4.png"),
color: currentTab == 3
? Colors.orange
: Colors.black,
),
title: Text('Title 4',
style: TextStyle(
fontSize: 10.0,
color: currentTab == 3
? Colors.orange
: Colors.black),)
)
],
),
希望有人会发现这很有用。
答案 4 :(得分:2)
BottomNavigationBarItem中的抖动中添加了一个新功能,active icon
。我们可以使用它来告知选项卡处于活动状态时图标应该是什么
bottomNavigationBar : new BottomNavigationBar(
currentIndex: index,
onTap: (int index) {
setState(() {
this.index = index;
}
);
_navigateToScreens(index);
},
type: BottomNavigationBarType.fixed,
items: [
new BottomNavigationBarItem(
backgroundColor: Colors.white,
icon: new Image.asset('images/1.0x/icon1.png'),
activeIcon:new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route1", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0))),
new BottomNavigationBarItem(
icon: new Image.asset('images/1.0x/icon2.png'),
activeIcon:new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route2", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0))),
new BottomNavigationBarItem(
icon: new Image.asset('images/1.0x/icon3.png'),
activeIcon: new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route3", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0),)),
new BottomNavigationBarItem(
icon: new Image.asset('images/1.0x/icon4.png'),
activeIcon: new Image.asset('images/1.0x/newIcon.png'),
title: new Text("Route4", style: new TextStyle(
color: const Color(0xFF06244e), fontSize: 14.0),))
]),
希望有人会发现这很有用。
答案 5 :(得分:1)
如果只想更改颜色而不是图标本身,则fixedColor会在选择图标时确定其颜色:
BottomNavigationBar(
...
fixedColor: Colors.red,
...
)
答案 6 :(得分:1)
如果要显示“图像资源”中的图标,可以通过这种方式更改底部导航栏的活动图标:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
List<Integer> list = new ArrayList<>();
for (Integer element : set) {
list.add(element);
}
答案 7 :(得分:0)
我以这种方式解决了。在 BottomNavigationBar 处,有两个属性 selectedItemColor 和 unselectedItemColor
bottomNavigationBar: BottomNavigationBar(
...
selectedItemColor: Theme.of(context).primaryColor,
unselectedItemColor: Theme.of(context).secondaryHeaderColor,
...
items: [
BottomNavigationBarItem(
icon: Icon(Icons.search),
title: Text('Search'),
),
BottomNavigationBarItem(
icon: Icon(Icons.star),
title: Text('Featured'),
),
],
),
答案 8 :(得分:0)
// create an async function to handle promised based execution order
(async()=>{
// define some globals
var update = async()=>{
// download the data
console.log('Report: Download Started');
var url = 'https://cov19.cc/report.json?v='+Math.random();
var res = await fetch(url);
var report = await res.json();
// set the last updated time
$('#last_updated').text(moment.utc(report.last_updated).fromNow());
// get variable data
var world = report.regions.world;
var total_confirmed = report.regions.world.totals.confirmed;
document.getElementById("total_confirmed").innerHTML = total_confirmed.commaSplit();
var total_critical = world.totals.critical;
document.getElementById("total_critical").innerHTML = total_critical.commaSplit();
var total_deaths = world.totals.deaths;
document.getElementById("total_deaths").innerHTML = total_deaths.commaSplit();
var total_active = world.totals.confirmed - (world.totals.deaths + world.totals.recovered);
document.getElementById("total_active").innerHTML = total_active.commaSplit();
var total_recovered = world.totals.recovered;
document.getElementById("total_recovered").innerHTML = total_recovered.commaSplit();
// hide the loading icon
$('#loader').hide();
};
// store last updated date
var old_last_updated;
// check for the last update
var update_check = async()=>{
console.log('Checking for updates');
var res = await fetch('https://cov19.cc/last_updated.txt');
var last_updated = await res.text();
// if the last updated date is newer than the stored last updated date then update the variable and update the table with the new data
if(old_last_updated == last_updated)return;
old_last_updated = last_updated;
update();
};
// initialize
update_check();
// check for updates every 60 seconds
setInterval(update_check, 60000);
})();
//cov19 prototypes
String.prototype.commaSplit = function() {
return this.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
};
Number.prototype.commaSplit = String.prototype.commaSplit;
答案 9 :(得分:0)
只想添加到现有答案中:尽管fixedColor
,(un)selectedItemColor
是必经之路,但有一个陷阱:
它们将被BottomNavigationBarItem.icon.color
覆盖!
因此请确保您先摆脱硬编码图标的颜色。