Цель: я хочу присвоить ярлыку элемента определенный шрифт и цвет в зависимости от того, выбран он или нет.
Мой подход: Поскольку стиль метки нельзя задать напрямую, я использую свойства «unselectedLabelStyle» и «selectedLabelStyle».
Эта проблема:
Красивая картинка (код ниже):
Код:
BottomNavigationBar(
elevation: 0,
onTap: (index) => selectPage(index),
currentIndex: selectedPageIndex,
selectedItemColor:
Provider.of<CustomColors>(context).customColorScheme['Dark Teal'],
unselectedLabelStyle:
Provider.of<CustomTextStyle>(context, listen: false)
.customTextStyle('IconLabel'),
selectedLabelStyle:
Provider.of<CustomTextStyle>(context, listen: false)
.customTextStyle('IconLabel'),
backgroundColor: Colors.white,
type: BottomNavigationBarType.fixed,
items: [
//home
bottomNavIcon(
context: context,
icon: Image.asset(
"assets/icons/icon_home.png",
),
icon_active: Image.asset("assets/icons/icon_home.png",
color: Provider.of<CustomColors>(context)
.customColorScheme['Dark Teal']),
label: 'Home',
),
//favorite
bottomNavIcon(
context: context,
icon: Image.asset("assets/icons/icon_favorite.png"),
icon_active: Image.asset("assets/icons/icon_favorite.png",
color: Provider.of<CustomColors>(context)
.customColorScheme['Dark Teal']),
label: 'Favorite',
),
//loockback
bottomNavIcon(
context: context,
icon: Image.asset("assets/icons/icon_lookback.png"),
icon_active: Image.asset("assets/icons/icon_lookback.png",
color: Provider.of<CustomColors>(context)
.customColorScheme['Dark Teal']),
label: 'Lookback',
),
//info & support
bottomNavIcon(
context: context,
icon: Image.asset("assets/icons/icon_info.png"),
icon_active: Image.asset("assets/icons/icon_info.png",
color: Provider.of<CustomColors>(context)
.customColorScheme['Dark Teal']),
label: 'Info & Support',
),
],
),
Код для иконок
BottomNavigationBarItem bottomNavIcon(
{required BuildContext context,
required Image icon,
required Image icon_active,
required String label}) {
return BottomNavigationBarItem(
icon: Padding(
padding: EdgeInsets.only(top: 6.h, bottom: 3.h),
child: icon,
),
activeIcon: Padding(
padding: EdgeInsets.only(top: 6.h, bottom: 3.h),
child: icon_active,
),
label: label,
);
}
Как говорится в документации, вы можете изменить цвет текста, используя свойство color
TextStyle
: https://api.flutter.dev/flutter/painting/TextStyle-class.html
Как только это говорит, возможно, BottomNavigationBar
перекрывает цвет при установке selectedItemColor
и/или unselectedItemColor
После попытки цвет фактически переопределяется, даже если вы не предоставляете selectedItemColor
и/или unselectedItemColor
Если вы хотите, чтобы невыбранные элементы имели определенный цвет, используйте:
unselectedItemColor: Colors.red,
Это изменит цвет метка и значок оба для невыбранных элементов.
Пример:
К сожалению, свойство unselectedLabelStyle
работает для изменения толщины шрифта, размера шрифта и т. д., но не для цвета.
Также проверьте этот ответ для unselectedLabelstyle не работает во Flutter
Спасибо, это сработало. Клянусь, я прочитал наведение мыши на BottomNavigationBar примерно 5 раз и всегда пропустил это свойство.