Search

BottomNavigationBar

BottomNavigationBar

BottomNavigationBar๋Š” Flutter์—์„œ ์•ฑ์˜ ํ•˜๋‹จ์— ์œ„์น˜ํ•˜๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์œ„์ ฏ์ž…๋‹ˆ๋‹ค.
์ฃผ๋กœ ์•ฑ์˜ ์ฃผ์š” ํ™”๋ฉด๋“ค ๊ฐ„์˜ ์ด๋™์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, Material Design ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๋”ฐ๋ฅด๋Š” ๋””์ž์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•

โ€ข
ํ•˜๋‹จ์— ๊ณ ์ •๋œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” ์ œ๊ณต
โ€ข
์•„์ด์ฝ˜๊ณผ ๋ผ๋ฒจ ์กฐํ•ฉ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ€ข
์„ ํƒ๋œ ํ•ญ๋ชฉ ๊ฐ•์กฐ ํ‘œ์‹œ
โ€ข
์ตœ์†Œ 2๊ฐœ์—์„œ ์ตœ๋Œ€ 5๊ฐœ๊นŒ์ง€์˜ ํ•ญ๋ชฉ ์ง€์›
โ€ข
์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ๋‚ด์žฅ
โ€ข
BottomNavigationBar ์˜ˆ์‹œ ์ฝ”๋“œ
โ€ข
๊ณตํ†ต ์œ„์ ฏ์œผ๋กœ ์ •์˜ํ•˜๊ธฐ

BottomNavigationBar ์˜ˆ์‹œ ์ฝ”๋“œ

โ€ข
main.dart
โ€ข
screens
โ—ฆ
home_screen.dart

main.dart

void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); Widget build(BuildContext context) { return MaterialApp( title: '๋กœ๊ทธ์ธ ์•ฑ', theme: ThemeData( useMaterial3: true, ), debugShowCheckedModeBanner: false, initialRoute: '/', routes: { '/': (context) => HomeScreen(), }, ); } }
Dart
๋ณต์‚ฌ

home_screen.dart

class HomeScreen extends StatelessWidget { HomeScreen({super.key}); Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, appBar: AppBar( title: const Text("Home"), ), body: Center( child: Column( children: [], ), ), bottomNavigationBar: BottomNavigationBar( type: BottomNavigationBarType.fixed, items: const [ BottomNavigationBarItem( icon: Icon(Icons.home), label: "๋ฉ”์ธ", ), BottomNavigationBarItem( icon: Icon(Icons.search), label: "๊ฒ€์ƒ‰", ), BottomNavigationBarItem( icon: Icon(Icons.category), label: "์ƒํ’ˆ", ), BottomNavigationBarItem( icon: Icon(Icons.shopping_bag), label: "์žฅ๋ฐ”๊ตฌ๋‹ˆ", ), BottomNavigationBarItem( icon: Icon(Icons.person), label: "๋งˆ์ด", ), ], ), ); } }
Dart
๋ณต์‚ฌ

๊ณตํ†ต ์œ„์ ฏ์œผ๋กœ ์ •์˜ํ•˜๊ธฐ

BottomNavigationBar๋ฅผ ๊ณตํ†ต ์œ„์ ฏ์œผ๋กœ ์ •์˜ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.

common_bottom_navigation_bar.dart

import 'package:flutter/material.dart'; class CommonBottomNavigationBar extends StatelessWidget { final int currentIndex; final Function(int) onTap; const CommonBottomNavigationBar({ Key? key, required this.currentIndex, required this.onTap, }) : super(key: key); Widget build(BuildContext context) { return BottomNavigationBar( currentIndex: currentIndex, onTap: onTap, type: BottomNavigationBarType.fixed, selectedItemColor: Theme.of(context).primaryColor, unselectedItemColor: Colors.grey, items: const [ BottomNavigationBarItem( icon: Icon(Icons.home), label: "๋ฉ”์ธ", ), BottomNavigationBarItem( icon: Icon(Icons.search), label: "๊ฒ€์ƒ‰", ), BottomNavigationBarItem( icon: Icon(Icons.category), label: "์ƒํ’ˆ", ), BottomNavigationBarItem( icon: Icon(Icons.shopping_bag), label: "์žฅ๋ฐ”๊ตฌ๋‹ˆ", ), BottomNavigationBarItem( icon: Icon(Icons.person), label: "๋งˆ์ด", ), ], ); } }
Dart
๋ณต์‚ฌ

๊ณตํ†ต ์œ„์ ฏ ์‚ฌ์šฉํ•˜๊ธฐ

class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); State<HomeScreen> createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { int _currentIndex = 0; Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("Home"), ), body: Center( child: Column( children: [], ), ), bottomNavigationBar: CommonBottomNavigationBar( currentIndex: _currentIndex, onTap: (index) { setState(() { _currentIndex = index; }); }, ), ); } }
Dart
๋ณต์‚ฌ

์žฅ์ 

โ€ข
์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ
โ€ข
์ผ๊ด€๋œ ๋””์ž์ธ ์œ ์ง€
โ€ข
์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
โ€ข
์ƒํƒœ ๊ด€๋ฆฌ ํŽธ์˜์„ฑ
์ด๋ ‡๊ฒŒ ๊ณตํ†ต ์œ„์ ฏ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ™”๋ฉด์—์„œ ๋™์ผํ•œ BottomNavigationBar๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.