728x90
반응형
Flutter 앱 하단부의 Bottom Navigation Bar 작동 방식 간단 정리해보겠습니다.

1. BottomNavigationBar 위젯의 currentIndex 속성은 현재 선택된 탭의 인덱스를 나타냄.
2. 각 탭 항목은 BottomNavigationBarItem 객체로 표현되며, 리스트 내에서 0부터 시작하는 인덱스를 가짐.
3. 사용자가 탭을 선택할 때마다 onTap 콜백 함수가 호출되고, 선택된 탭의 인덱스가 함수의 인자로 전달됨.(아래의 코드에서는 int타입의 index)
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
4. setState 호출로 빌드 재시행(bottom navigation bar 변경에 따른 화면 다시 빌드)
더보기
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Bottom Navigation Bar',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _selectedIndex = 0;
static const List<Widget> _widgetOptions = <Widget>[
Text('Home Page', style: TextStyle(fontSize: 35, fontWeight: FontWeight.bold)),
Text('Search Page', style: TextStyle(fontSize: 35, fontWeight: FontWeight.bold)),
Text('Profile Page', style: TextStyle(fontSize: 35, fontWeight: FontWeight.bold)),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Bottom Navigation Bar'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.shifting, // 여기에서 변경
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
backgroundColor: Colors.blue, // 선택 시 배경 색상
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Search',
backgroundColor: Colors.green, // 선택 시 배경 색상
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
backgroundColor: Colors.red, // 선택 시 배경 색상
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.white, // 선택된 항목의 아이콘 및 텍스트 색상
onTap: _onItemTapped,
),
);
}
}
cf)참고로,type : BottomNavigationBarType.shifting 속성을 지정해주면,
1)선택한 항목 배경색 강조
2)선택된 항목 레이블만 표시 가능.
3)애니메이션 효과 적용 가능
합니다.
이상입니다.
읽어주셔서 감사합니다.
728x90
반응형
'Flutter' 카테고리의 다른 글
[Flutter] 공공데이터 api 활용해 xml 데이터 가져오기 (0) | 2025.01.29 |
---|---|
[Flutter] MaterialApp을 statefulwidget에서 쓰면 좋은 경우 (0) | 2025.01.29 |
[Flutter] 공공 데이터 활용해서 앱 만들기 - api key 관련 문제 (0) | 2025.01.24 |
[Flutter] Shared preferences를 사용해서 좋아요 버튼 구현하기 (0) | 2025.01.24 |
[Flutter] Firebase Firestore에서 데이터 가져오는 두 가지 방법 (0) | 2025.01.24 |