[Flutter] Drawer사용법

2025. 6. 24. 18:28·Flutter/Flutter Study

일정 관리 앱을 만들던 중 사이드 메뉴를 사용하려고 하니 `Drawer`를 사용해야 한다는 것을 알게됨.

그래서 `Drawer`에 대해 정리를 해보려고함

 

`Drawer`란?

  • 사용자가 앱의 메뉴를 열거나 닫을 때 슬라이딩 형태로 화면에 나타나는 위젯
  • 주로 앱의 내비게이션 메뉴를 구현하는데 사용되고 다른 메뉴로 넘어가는 기능으로 사용됨

Flutter에서는 `Drawer`위젯과 `Scaffold`를 조합하여 주로 사용함.

 

순서대로 보겠음.

 

예제

1. `Scaffold` 생성

App에 `Drawer`를 구현하려면, `Scaffold` 위젯으로 감싸야함.

`Scaffold` 위젯은 `MATERIAL Design` 가이드 라인을 따르는 App에 일관된 시각적 구조를 제공함.

  • `Drawer`
  • `AppBar`
  • `SnackBar`

와 같은 특별한 `Material Design` 컴포넌트들을 지원함.

Scaffold(
  appBar: AppBar(
    title: const Text('여기서는 햄버거가 없는 AppBar'),
  ),
  drawer: // 여기에 드로어를 추가하면 됨.
);

 

2. `Drawer` 추가

다음으로 `Scaffold`에 `Drawer`를 추가함.

Scaffold(
  appBar: AppBar(
    title: const Text('여기서부턴 햄버거 버튼 있는 AppBar'),
  ),
  drawer: Drawer(
    child: // 다음 단계에서 드로어에 내용을 채우면 됨.
  ),
);

 

3. `Drawer`에 항목 채우기

드로어를 생성했으므로 여기에 항목들을 추가하면 됨.

여기서는 `ListView`를 사용하겠음. `Column`을 사용해도 되지만, `ListView`는 콘텐츠가 초과하게 되면 사용자가 `Drawer`를 스크롤 할 수 있게 해주기 때문임.

 

`DrawerHeader`와 `ListView` 2개를 추가해보겠음.

Drawer(
  // 드로어에 ListView를 추가함. 이는 콘텐츠가 화면을 초과하는 경우 사용자가 드로어를 스크롤할 수 있게 함.
  child: ListView(
    // 중요: ListView에서 모든 패딩을 제거함.
    padding: EdgeInsets.zero,
    children: [
      const DrawerHeader(
        decoration: BoxDecoration(
          color: Colors.blue,
        ),
        child: Text('드로어 헤더'),
      ),
      ListTile(
        title: const Text('항목 1'),
        onTap: () {
          // 앱의 상태를 업데이트함.
          // ...
        },
      ),
      ListTile(
        title: const Text('항목 2'),
        onTap: () {
          // 앱의 상태를 업데이트함.
          // ...
        },
      ),
    ],
  ),
);

 

4. `Drawer`를 프로그래밍 방식으로 열기

일반적으로 드로어를 열기 위해 별도의 코드는 필요하지 않음. 

왜냐하면, `leading`위젯이 `null`인 경우 `AppBar`의 기본 구현은 `DrawerButton`이기 때문임

But, `Drawer`를 자유롭게 제어하려면 `Builder`를 사용하여 `Scaffold.of(context).openDrawer()`를 호출할 수 있음.

Scaffold(
  appBar: AppBar(
    title: const Text('햄버거 버튼 있는 AppBar'),
    leading: Builder(
      builder: (context) {
        return IconButton(
          icon: const Icon(Icons.menu),
          onPressed: () {
            Scaffold.of(context).openDrawer();
          },
        );
      },
    ),
  ),
  drawer: Drawer(
    child: // 마지막 단계에서 드로어에 내용을 채움.
  ),
);

 

5. `Drawer`를 프로그래밍 방식으로 닫기

사용자가 항목을 탭한 후 드로어를 닫고 싶을 수 있음. 이를 위해 `Navigator`를 사용할 수 있음.

 

사용자가 `Drawer`를 열면 Flutter는 `Drawer`를 내비게이션 스택에 추가함.

즉, `Drawer`를 닫으려면 `Navigator.pop(context)를 호출함.

ListTile(
  title: const Text('항목 1'),
  onTap: () {
    // 앱의 상태를 업데이트함.
    // ...
    // 그런 다음 Drawer를 닫음
    Navigator.pop(context);
  },
);

 

 

 

[출처] https://1986hz.tistory.com/143

'Flutter > Flutter Study' 카테고리의 다른 글

[Flutter] Rest API  (0) 2025.05.14
[Flutter] AI 챗봇 실습  (0) 2025.05.14
[Flutter] 위젯 생명주기  (0) 2025.04.22
[Flutter] 웹뷰 사용해서 앱에서 웹연결 실습 간단 정리  (0) 2025.04.17
[Flutter] Basic Widget 기본 개념 (실습)  (0) 2025.04.15
'Flutter/Flutter Study' 카테고리의 다른 글
  • [Flutter] Rest API
  • [Flutter] AI 챗봇 실습
  • [Flutter] 위젯 생명주기
  • [Flutter] 웹뷰 사용해서 앱에서 웹연결 실습 간단 정리
이도서
이도서
  • 이도서
    도서의 코딩노트
    이도서
  • 전체
    오늘
    어제
    • 분류 전체보기 (249)
      • Today I Learned (79)
        • 2024 (78)
      • Swift (25)
        • Swift 문법 정리 (19)
        • RxSwift (5)
      • Swift Study (12)
        • Playground (2)
        • Storyboard (9)
        • UIKit (1)
      • Flutter (27)
        • Dart 언어 (16)
        • Flutter Study (11)
      • React (37)
        • HTML & CSS (8)
        • JavaScript 기본 (12)
        • JavaScript 심화 (14)
        • Node.js (2)
        • React (1)
      • Git (3)
      • 코딩테스트 (60)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 개발 공부 공유 링크
  • 인기 글

  • 태그

    Til
    storyboard
    ios앱개발자
    iOS앱개발
    javascript 기본
    DART
    CLASS
    함수
    function
    Swift
    javascript
    내일배움캠프
    코딩테스트 level.1
    객체지향
    코딩테스트Level.1
    코딩테스트
    html
    React
    Flutter
    ios
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이도서
[Flutter] Drawer사용법
상단으로

티스토리툴바