BottomNavigationBar
— это виджет, который отображается в нижней части экрана и позволяет пользователю легко переключаться между различными экранами или разделами приложения. Он часто используется для навигации в приложениях с несколькими вкладками.
1. Простой пример с BottomNavigationBar
Это самый простой пример использования, где мы создаем навигационную панель с тремя элементами.
Copy // Some code
Scaffold(
appBar: AppBar(title: Text('Пример BottomNavigationBar')),
body: Center(child: Text('Главный экран')),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
),
],
),
)
Здесь BottomNavigationBar
содержит три вкладки: "Главная", "Поиск", "Профиль". Каждая вкладка имеет иконку и текстовое описание.
2. Параметр currentIndex
currentIndex
используется для указания, какая вкладка сейчас активна.
Copy // Some code
Scaffold(
appBar: AppBar(title: Text('Навигация')),
body: Center(child: Text('Выбрана вкладка Главная')),
bottomNavigationBar: BottomNavigationBar(
currentIndex: 1, // Вторая вкладка активна
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
),
],
),
)
3. Параметр onTap
onTap
позволяет определить, что происходит при нажатии на определенную вкладку. Обычно используется для обновления состояния приложения.
Copy // Some code
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _selectedIndex = 0;
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('BottomNavigationBar')),
body: Center(
child: Text('Выбрана вкладка: $_selectedIndex'),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: _onItemTapped,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
),
],
),
);
}
}
Здесь при нажатии на любую вкладку обновляется состояние, и текст на экране меняется в зависимости от выбранной вкладки.
4. Параметр type
Этот параметр определяет, как будет выглядеть навигационная панель. Варианты: fixed
(по умолчанию) и shifting
.
fixed
оставляет иконки и текст на месте.
shifting
анимирует иконки при нажатии и изменяет фон активной вкладки.
Copy // Some code
BottomNavigationBar(
type: BottomNavigationBarType.shifting, // Включена анимация и смена цвета
currentIndex: _selectedIndex,
onTap: _onItemTapped,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
backgroundColor: Colors.blue, // Цвет при выборе
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
backgroundColor: Colors.red, // Цвет при выборе
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
backgroundColor: Colors.green, // Цвет при выборе
),
],
)
Здесь используется стиль shifting
, где цвет фона меняется в зависимости от выбранной вкладки.
5. Параметр selectedItemColor
и unselectedItemColor
Эти параметры позволяют настроить цвет активных и неактивных вкладок.
Copy // Some code
BottomNavigationBar(
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber, // Цвет активной вкладки
unselectedItemColor: Colors.grey, // Цвет неактивных вкладок
onTap: _onItemTapped,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
),
],
)
Активная вкладка будет выделяться желтым цветом, а неактивные — серым.
6. Параметр iconSize
Этот параметр позволяет изменять размер иконок.
Copy // Some code
BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: _onItemTapped,
iconSize: 30, // Размер иконок
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
),
],
)
Все иконки будут увеличены до 30 пикселей.
7. Параметр showSelectedLabels
и showUnselectedLabels
Эти параметры управляют отображением подписей под иконками для выбранных и невыбранных элементов.
Copy // Some code
BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: _onItemTapped,
showSelectedLabels: true, // Показывать подпись выбранной вкладки
showUnselectedLabels: false, // Скрывать подписи невыбранных вкладок
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Главная',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Поиск',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Профиль',
),
],
)