[Flutter] TabBar 위젯

2024. 11. 12. 11:56·Flutter

TabBar와 TabBarView 개념

  • TabBar: 여러 개의 탭을 화면에 표시하며, 각 탭을 클릭할 수 있도록 해주는 위젯입니다. 사용자가 탭을 클릭하면 해당 탭에 대한 내용을 표시합니다.
  • TabBarView: TabBar와 연결되어 각 탭에 해당하는 내용을 표시하는 역할을 합니다. 사용자가 탭을 선택하면 이 위젯이 해당하는 내용을 보여줍니다.
  • TabController
    • TabController: 탭의 상태를 관리하는 클래스입니다. 탭의 개수와 현재 활성화된 탭을 추적합니다. SingleTickerProviderStateMixin을 사용하여 애니메이션과 상태 관리를 돕습니다.
    • length: 탭의 개수를 지정합니다.
    • vsync: 애니메이션의 성능을 최적화하는 데 사용됩니다. 이 예제에서는 this를 사용하여 현재 상태를 참조합니다.
  • 위젯 생명주기
    • initState(): 위젯이 처음 생성될 때 호출됩니다. 이곳에서 TabController를 초기화합니다.
    • dispose(): 위젯이 더 이상 필요하지 않을 때 호출됩니다. 이곳에서 TabController를 정리하여 메모리 누수를 방지합니다.
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

// StatefulWidget 클래스 - 상태를 관리 표현
class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

// 부모 클래스에 상태를 접근 수정 등 역할 수정.
class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin{

  // 멤버 변수 선언
  late TabController _tabController;
  // late -> 나중에 초기화 할거야!... null 값이라도 오류가 안남

  @override
  void initState() {
    super.initState();
    // 메모리에 올라 갈 때 단 한 번 호출 되는 메서드
    // vsync -> 애니메이션 돌아갈 때 알아서 부드럽게 해주는 녀석.. (SingleTickerProviderStateMixin)
    // 다형성 --> this
    _tabController = TabController(length: 3, vsync: this);
  }

  @override
  void dispose() {
    super.dispose();
    // 위젯이 제거 될 때 호출 된다. (자원 낭비 막기 위해..)
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TabBar Example'),
          bottom: TabBar(
            controller: _tabController,
            tabs: [
              Tab(text: 'HOME'),
              Tab(text: 'Favorites', icon: Icon(Icons.star)),
              Tab(text: 'Settings', icon: Icon(Icons.settings)),
            ],
          ),
        ),
        body: TabBarView(
          controller: _tabController, // 연동
          children: [
            Center(child: Text('HOME')),
            Center(child: Text('Favorites')),
            Center(child: Text('Settings')),
          ],
        ),
      ),
    );
  }
}

 

 

'Flutter' 카테고리의 다른 글

[Flutter] Dio 통신 연습  (0) 2024.11.12
[Flutter] Dio 통신  (0) 2024.11.12
[Flutter] BottomSheet 위젯  (0) 2024.11.12
[Flutter] 쇼핑 카트 앱 만들어 보기  (3) 2024.11.11
[Flutter] PageView 위젯  (0) 2024.11.11
'Flutter' 카테고리의 다른 글
  • [Flutter] Dio 통신 연습
  • [Flutter] Dio 통신
  • [Flutter] BottomSheet 위젯
  • [Flutter] 쇼핑 카트 앱 만들어 보기
미로910
미로910
개발자를 꿈꾸는 민경이의 기록 블로그
  • 미로910
    개발 note
    미로910
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 설치 메뉴얼
      • HTML
      • JAVA
        • Java 기초
        • Java 응용
        • 자료구조
        • HTTP
        • JSP 프로그래밍
      • MySQL
        • MySQL 기본
        • 1일 1쿼리
      • CSS
      • Spring boot
      • JS
        • 게시판 만들기
      • Git
      • Flutter
        • MVVM 활용
        • 심화 버전
        • 1일 1 Flutter
      • 디자인 패턴의 활용
      • error note
      • My Project
        • [졸작] LLM 기반 특허 유사도 분석 시스템
        • 도서 관리 프로그램 (final project)
        • amigo
        • 친구 매칭 프로그램(FMP)
      • Python
      • 딥러닝
      • 네트워크
      • 공부 노트
        • 연구회
        • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 전체보기
    • -----------------------
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미로910
[Flutter] TabBar 위젯
상단으로

티스토리툴바