Flutter

[Flutter] 37. TabBar 위젯이란?

Song hyun 2024. 11. 12. 09:50
728x90
반응형

[Flutter] 37. TabBar 위젯이란?

 

1. TabBar 위젯에 대해

(1) TabBar와 TabBarView 개념

 

(2) TabController 

 

(3) 위젯 생명주기

 

 

2. 시나리오 코드

import 'package:flutter/material.dart';
import 'package:class_v04/main.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

// 부모 클래스의 상태를 접근 수정 등 역할 수정
// SingleTickerProviderStateMixin - 애니메이션 쓸 때 알아서 처리해줌
class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin{
  
  // 멤버 변수 선언
  // late - 늦은 초기화
  // 나중에 초기화 된다. - optional 안 붙여도 오케이
  late TabController _tabController;

  @override
  void initState() {
    // 메모리에 올라갈 때, 단 한 번 호출되는 메섣,
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
  }

  @override
  void dispose() {
    // 위젯 제거 될 대 호출되는 메서드
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
            title: Text('TapBar Example'),
          bottom: TabBar(
            controller: _tabController,
            tabs: [
              Tab(text: 'HOME',),
              Tab(text: 'HOME',),
              Tab(text: 'HOME',),
            ],
          ),
        ),
        body: Container(),
      ),
    );
  }
}

 

import 'package:flutter/material.dart';
import 'package:class_v04/main.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

// 부모 클래스의 상태를 접근 수정 등 역할 수정
// SingleTickerProviderStateMixin - 애니메이션 쓸 때 알아서 처리해줌
class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin{
  
  // 멤버 변수 선언
  // late - 늦은 초기화
  // 나중에 초기화 된다. - optional 안 붙여도 오케이
  late TabController _tabController;

  @override
  void initState() {
    // 메모리에 올라갈 때, 단 한 번 호출되는 메섣,
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
  }

  @override
  void dispose() {
    // 위젯 제거 될 대 호출되는 메서드
    super.dispose();
  }

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