[Flutter] 페이지 나누기 - Tab

2023. 9. 22. 22:35·Web & Android/Flutter
목차
  1. 동적인 UI 만드는 법
  2. 1. 현재 UI의 현재 상태를 저장할 state를 만든다.
  3. 2. 그 state에 따라서 현재 UI가 어떻게 보일지 코드를 짜놓는다.
  4. 3. 유저가 state를 쉽게 조작할 수 있도록 기능을 구현한다.
  5. 예제

동적인 UI 만드는 법

1. 현재 UI의 현재 상태를 저장할 state를 만든다.

  • 주의사항 : state 이므로 StatefulWidget으로 변경해야함!
  • tab을 0으로 지정해놨기 때문에 tab이 0이면 0번탭, 1이면 1번탭으로 변경됨 → ‘홈’ 이렇게 지정해도 됨
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var tab = 0;
(하단생략)

2. 그 state에 따라서 현재 UI가 어떻게 보일지 코드를 짜놓는다.

body: [ Text('홈페이지'), Text('샵페이지') ]
,

3. 유저가 state를 쉽게 조작할 수 있도록 기능을 구현한다.

  • onTap: 파라미터를 추가하여 tab = i; 하면 됨
  • state이므로 setState안에 넣어야 함
bottomNavigationBar: BottomNavigationBar(
showUnselectedLabels: false,
showSelectedLabels: false,
currentIndex: pageNum,
onTap: (i){
setState(() {
tab = i;
})
},
items: [ 생략 ]
)

예제

import 'package:flutter/material.dart';
import 'package:instagram_pr/style.dart';
import './style.dart' as style;
void main() {
runApp(
MaterialApp(
theme: style.theme,
home: MyApp()
));
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var tab = 0; // 1. 현재 상태 저장
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Instagram'),
actions: [
IconButton(
icon: Icon(Icons.add_box_outlined),
onPressed: () {},
iconSize: 30,
)
]),
body: [Home(), Text('샵페이지')][tab], // 2. state에 따라 tab 보이는 상태 변경
bottomNavigationBar: BottomNavigationBar(
showSelectedLabels: false,
showUnselectedLabels: false,
onTap: (i){
setState(() {
tab = i;
});
},
items: [
BottomNavigationBarItem(icon: Icon(Icons.home_outlined), label: '홈'),
BottomNavigationBarItem(icon: Icon(Icons.shopping_bag_outlined), label: '샵')
],
),
);
}
}
class Home extends StatelessWidget {
const Home({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 3,
itemBuilder: (c, i) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network('https://codingapple1.github.io/kona.jpg'),
Container(
constraints: BoxConstraints(maxWidth: 600),
padding: EdgeInsets.all(20),
width: double.infinity,
child: Column(
children: [
Text('좋아요 100'),
Text('글쓴이'),
Text('글내용')
],
),
)
],
);
}
);
}
}

저작자표시 비영리 변경금지 (새창열림)

'Web & Android > Flutter' 카테고리의 다른 글

[Flutter] 페이지 나누기 - 라우터 사용 (/)  (0) 2023.09.22
[Flutter] 페이지 나누기 - Navigator  (0) 2023.09.22
[Flutter] 스크롤 위치 파악하기  (0) 2023.09.22
[Flutter] http 패키지로 GET 요청  (0) 2023.09.22
[Flutter] 파일 분리하기  (0) 2023.09.22
  1. 동적인 UI 만드는 법
  2. 1. 현재 UI의 현재 상태를 저장할 state를 만든다.
  3. 2. 그 state에 따라서 현재 UI가 어떻게 보일지 코드를 짜놓는다.
  4. 3. 유저가 state를 쉽게 조작할 수 있도록 기능을 구현한다.
  5. 예제
'Web & Android/Flutter' 카테고리의 다른 글
  • [Flutter] 페이지 나누기 - 라우터 사용 (/)
  • [Flutter] 페이지 나누기 - Navigator
  • [Flutter] 스크롤 위치 파악하기
  • [Flutter] http 패키지로 GET 요청
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (794)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (410)
        • 백준[JAVA] (76)
        • 프로그래머스[JAVA] (257)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Flutter
    자바
    리눅스마스터
    Java
    springboot
    스프링부트
    데이터베이스
    플러터
    CS
    spring
    pcce 기출문제
    백준
    스프링 부트 쇼핑몰 프로젝트 with JPA
    python
    programmers
    스프링
    Linux
    DB
    Spring Security
    프로그래머스
    리눅스
    CS지식
    Oracle
    postgresql
    baekjoon
    데이터
    JPA
    backjoon
    시큐리티
    리눅스마스터 1급
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[Flutter] 페이지 나누기 - Tab

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.