강의 기록/Flutter 인스타그램 클론 생성(오준석)
[Flutter] 인스타그램 클론 생성하기 -2 네비바 클릭 시 화면 전환 기능 구현
momong'-'
2023. 5. 16. 14:01
화면설계
Tab Page에 네비바가 존재하고, Home Page, SearchPage, Account Page가 있다. 각 메뉴를 클릭하였을 경우 각 페이지로 이동되도록 구현한다.
일단 화면이 이동되는 것만 구현해두고, 각 페이지는 다음에 차근차근 변경할 예정이다.
bottomNavigationBar: 하단에 있는 네비게이션 바
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex, // 선택된 네비게이션바 아이템 Index
onTap: (index) { // 클릭이벤트
setState(() {
_currentIndex = index; // 클릭한 네비게이션바 아이템을 현재 Index로 지정.
});
},
items: const [ // 네비게이션 바 리스트
BottomNavigationBarItem(
icon: {아이콘},
label: {라벨명},
),
],
)
TabPage에서 클릭이벤트를 줘 클릭시 선택된 네비아이템이 표시되게 한다.
소스코드
tab_page.dart
import 'package:flutter/material.dart';
import 'package:instagram_clone/tab/account/account_page.dart';
import 'package:instagram_clone/tab/home/home_page.dart';
import 'package:instagram_clone/tab/search/search_page.dart';
class TabPage extends StatefulWidget {
const TabPage({Key? key}) : super(key: key);
@override
State<TabPage> createState() => _TabPageState();
}
class _TabPageState extends State<TabPage> {
int _currentIndex = 0;
final _pages = const [
HomePage(),
SearchPage(),
AccountPage(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: _pages[_currentIndex],
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex,
onTap: (index) {
setState(() {
_currentIndex = index;
});
},
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'home',
),BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'search',
),BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'account',
),
],
),
);
}
}
네비게이션바 아이템을 클릭시 body 내용이 변할 수 있도록, 네비바 아이템과 body안 페이지 리스트 갯수를 맞춰 코드를 설계한다.
home_page.dart
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Instagram Clone'),
),
body: Column(
children: [
Text('Instagram에 오신 것을 환영합니다.')
],
)
);
}
}
search_page.dart
import 'package:flutter/material.dart';
class SearchPage extends StatelessWidget {
const SearchPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}
account_page.dart
import 'package:flutter/material.dart';
class AccountPage extends StatelessWidget {
const AccountPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}
https://github.com/LeeYoonJung/InstagramClone
GitHub - LeeYoonJung/InstagramClone: Instagram Clone (인프런 Flutter 강의)
Instagram Clone (인프런 Flutter 강의). Contribute to LeeYoonJung/InstagramClone development by creating an account on GitHub.
github.com