AppBar — 정의, 설정 및 Flutter 위젯

저자: IT Sectr 게시일: 2026-07-02 읽는 시간: 9 분

AppBar는 Flutter에서 화면 상단 패널 위젯로, Material Design 컴포넌트를 제목, 작업, 네비게이션 버튼 및 탭으로 구현합니다. Row나 Stack을 사용한 커스텀 패널과 달리, AppBar는 올바른 높이 56dp(접힌 상태에서 48dp)와 자동 SafeArea 처리를 제공하는 기본 아키텍처를 제공합니다. Flutter API Reference (2026)에 따르면, AppBar는 SliverAppBar를 통한 스크롤 애니메이션과 forceMaterialTransparency 매개변수를 통한 Material 3와의 통합을 지원합니다. 일반적인 모바일 앱에서 AppBar는 페이지 제목, 시스템 작업 및 섹션 전환을 결합하는 네비게이션 및 정보 허브로 작동합니다.

주요 포인트

  • AppBar — 제목, actions, leading 그리고 TabBar 및 Material 3 지원이 있는 Flutter의 상단 패널 위젯
  • Title — 제목 텍스트, 플래티폼에 따라 가운데 정렬 또는 왼쪽 정렬
  • Actions — AppBar 오른쪽에 배치되는 작업 위젯(IconButton, PopupMenuButton) 목록
  • Leading — 왼쪽 네비게이션 버튼(Drawer용 “헤버거” 아이콘 또는 중첩 화면용 “뒤로가기” 버튼)
  • Bottom — TabBar, PreferredSize 또는 커스텀 위젯을 임베드하기 위한 AppBar의 하단 영역

Flutter에서 AppBar란 무엇인가

AppBar는 Scaffold의 상단에 표시되는 표준 Material 상단 패널 컴포넌트입니다. 화면 제목, 네비게이션 버튼(보통 “헤버거” 아이콘 또는 “뒤로가기” 화살표) 및 작업(검색, 설정 또는 다른 기능을 여는 아이콘)을 포함합니다. AppBar는 플래티폼에 맞게 자동으로 적응합니다: Android에서는 표준 Material 하단 그림자를 사용하고, iOS에서는 투명도가 있는 더 평품한 디자인을 사용합니다.

AppBar는 PreferredSizeWidget 인터페이스를 구현하므로, 높이가 고정되어 있으며 빌드 전에 알 수 있습니다. 기본적으로, 세로 모드에서 Android의 AppBar 높이는 56dp, iOS는 44dp이며, 상단의 SafeArea를 고려합니다. 이 기능을 통해 Scaffold는 렌더링 중 재구성을 피하며 body용 공간을 미리 계산할 수 있습니다.

Flutter Material Library Guide (2026)에 따르면, AppBar는 여러 번의 반복을 거쳐왔습니다: Flutter 1.x에서는 텍스트가 있는 단순한 컨테이너였으며, Flutter 2.x에서는 Material 3와 flexibleSpace을 지원했고, Flutter 3.x에서는 System UI(상태 바 색상, 투명도)와 통합되었습니다. 현대 AppBar는 Android 12+장치에서 Material You의 Dynamic Color를 지원합니다.

AppBar 구조: 필드 및 매개변수

AppBar는 상단 패널의 각 부분을 제어하는 매개변수 세트를 제공합니다. 이러한 필드를 이해하면 커스텀 해결책을 만들지 않고도 패널을 다양한 디자인 요구사항에 유연하게 설정할 수 있습니다.

필드타입설명
titleWidget?패널의 주 제목, 보통 화면 이름을 가진 Text
leadingWidget?제목 왼쪽의 위젯(“뒤로가기” 버튼 또는 메뉴 아이콘)
actionsList<Widget>?오른쪽의 작업 위젯 목록(IconButton, PopupMenuButton)
bottomPreferredSizeWidget?TabBar 또는 커스텀 위젯용 하단 영역
flexibleSpaceWidget?SliverAppBar에서 스크롤시 애니메이션되는 배경 위젯
backgroundColorColor?패널의 배경 색, 테마 색을 대체
elevationdouble패널 아래의 그림자, 콘텐츠 위로 뜨우는 효과 창출
centerTitlebool?제목 가운데 정렬(true — Material 3 동작, false — Android 스타일)

Title 및 leading: 제목 및 네비게이션 설정

title 필드는 모든 위젯을 수락하지만, 가장 일반적으로는 TextStyle을 통한 스타일 설정으로 Text를 사용합니다. 긴 제목의 경우, 공간이 충분하지 않을 때 문자열이 올바르게 잘려지도록 title을 Flexible에 래핑할 것을 권장합니다. leading 필드는 명시적으로 설정되지 않은 경우 Navigator.push를 통해 중첩 화면으로 이동할 때 자동으로 BackButton으로 대체됩니다.

Actions: 작업 아이콘 배치

actions 목록에는 AppBar의 오른쪽 끝에 정렬된 위젯이 포함됩니다. 각 요소는 48dp(Material Design 표준)보다 넓지 않아야 합니다. 작업을 그룹화하려면 PopupMenuButton을 사용하세요 — 이는 머 중요하지 않은 옵션을 드롭다운 메뉴에 숨기고 인터페이스 밀도에 관한 Material 게이드라인을 준수합니다.

AppBar 커스터미이징: 스타일, 색상 및 동작

AppBar는 색상, 그림자 및 패딩 필드를 통한 깊은 커스터미이징을 지원합니다. 기본 스타일링은 앱 테마에서 상속되지만, 각 필드는 개별적으로 대체할 수 있습니다. 주요 설정 시나리오를 살펴보겠습니다.

AppBar의 배경 색은 backgroundColor를 통해 설정됩니다. 지정되지 않으면 ThemeData의 appBarTheme이 사용됩니다. Material 3에서 AppBar 색상은 ColorScheme.primary에서 자동 계산되지만, 특정 화면에 대해 대체할 수 있습니다. 투명 AppBar(보통 프로필에서 사용)의 경우 elevation: 0과 함께 backgroundColor: Colors.transparent를 설정하세요.

elevation 필드는 AppBar 아래의 그림자를 제어합니다. 값 0은 그림자를 제거하여 Material 3에 해당하는 “평품한” 패널 효과를 만듭니다. 값 4는 표준 Material Design 그림자를 제공합니다. 커스텀 그림자 제어를 위해서는 shadowColor를 사용하세요 — 이는 패널을 콘텐츠와 시각적으로 구분하는 그림자 색상입니다.

AppBar에서 텍스트 색상을 제어하려면 foregroundColor를 사용하세요. 이 필드는 제목, 아이콘 및 actions의 텍스트 색상에 영험을 미칩니다. backgroundColor를 변경하면 대비적인 foregroundColor이 자동으로 선택되지만, 비표준 디자인을 위해 강제할 수 있습니다.

SliverAppBar: AppBar의 애니메이션 버전

SliverAppBar는 CustomScrollView 내에서 사용하도록 AppBar를 확장한 것으로, 스크롤 애니메이션(접기, 패러랙스 효과, 고정)을 지원합니다. 표준 AppBar와 달리, SliverAppBar는 sliver 위젯이며 스크롤 위치에 따라 동적으로 크기가 변경됩니다.

SliverAppBar의 주요 모드는 pinned, floating 및 snap 필드의 조합으로 결정됩니다. pinned 모드에서 패널은 화면 상단에 항상 표시됩니다. floating 모드에서는 뒤로 스크롤할 때 나타난니다. floating + snap 조합은 약간의 위로 스크롤만으로 나타나는 “붙는” 패널 동작을 만들며, 뉴스 피드에서 자주 사용됩니다.

Flutter API SliverAppBar (2026)에 따르면, SliverAppBar을 사용하려면 일반 ListView 또는 Column을 sliver 위젯이 있는 CustomScrollView로 대체해야 합니다. Scaffold는 계속 정상 작동하지만, Scaffold의 appBar 필드는 null이어야 합니다 — SliverAppBar는 CustomScrollView 내에서 첫 번째 sliver로 배치됩니다.

앱에서 AppBar 설정 예시

검색, 드롭다운 메뉴 및 TabBar가 있는 AppBar 예시를 살펴보겠습니다. 이 코드는 Flutter 프로덕션 앱에서 일반적인 상단 패널 구성을 보여줍니다.

dart
Scaffold(
  appBar: AppBar(
    title: const Text('카탈로그'),
    centerTitle: true,
    leading: IconButton(
      icon: const Icon(Icons.menu),
      onPressed: () => Scaffold.of(context).openDrawer(),
    ),
    actions: [
      IconButton(
        icon: const Icon(Icons.search),
        onPressed: () => showSearch(context: context, delegate: ProductSearch()),
      ),
      PopupMenuButton<String>(
        onSelected: (String value) {},
        itemBuilder: (context) => [
          const PopupMenuItem(value: 'settings', child: Text('설정')),
          const PopupMenuItem(value: 'about', child: Text('앱 정보')),
        ],
      ),
    ],
    bottom: const TabBar(
      tabs: [
        Tab(text: 'All'),
        Tab(text: 'New'),
        Tab(text: 'Popular'),
      ],
    ),
  ),
  body: const TabBarView(
    children: [
      AllProductsPage(),
      NewProductsPage(),
      PopularProductsPage(),
    ],
  ),
)

예시에서 AppBar는 가운데 정렬된 제목, 왼쪽에 Drawer 여는 버튼, 오른쪽에 검색 아이콘과 드롭다운 메뉴를 포함합니다. 하단의 TabBar를 통해 상품 카테고리를 전환할 수 있습니다. 이 설정은 대부분의 모바일 앱 시나리오를 다룽니다: 네비게이션, 검색, 추가 옵션 및 섹션 전환 — 모두 하나의 상단 패널에서 가능합니다.

자주 묻는 질문

Flutter에서 AppBar 높이를 바꾸려면 어떻게 하나요?

AppBar의 높이는 고정(56dp)되어 있으며 직접 변경할 수 없습니다. 커스텀 높이를 위해서는 원하는 높이의 커스텀 위젯을 감싸는 PreferredSize를 사용하세요. 또는 표준 패널 기능을 잃지 않고 접힌 상태에서 크기를 유연하게 관리하려면 collapsedHeight이 있는 SliverAppBar를 사용하세요.

AppBar 아래 그림자를 어떻게 제거하나요?

AppBar 생성자에서 elevation: 0 필드를 설정하세요. 이로써 그림자가 제거되고 패널이 시각적으로 평품해짐으로 Material 3 스타일과 일치합니다. 완전한 제어를 위해서는 z-좌표를 유지해야 하는 경우 elevation을 변경하지 않고 그림자 색상을 대체하려면 shadowColor: Colors.transparent를 사용하세요.

AppBar와 SliverAppBar의 차이는 뭔가요?

AppBar는 Scaffold.appBar에 배치되는 고정 높이의 정적 패널입니다. SliverAppBar는 CustomScrollView 내에서 사용되며 스크롤에 따라 접기, 고정 및 애니메이션이 가능한 동적 버전입니다. SliverAppBar는 스크롤 동작을 유연하게 관리하기 위해 collapsedHeight, expandedHeight, pinned 및 floating 필드를 제공합니다.

AppBar에 검색을 어떻게 추가하나요?

actions 목록에 검색 아이콘이 있는 IconButton을 추가하세요. 누르면, 커스텀 SearchDelegate를 사용하여 자동 애니메이션으로 검색 화면을 여는 showSearch를 호출할 수 있습니다. 또는 title을 TextField로 대체하여 AppBar를 인라인 검색 바로 변경하며, 카탈로그와 리스트에 편리합니다.

AppBar에서 제목이 가운데에 정렬되지 않는 이유는 뭐인가요?

기본적으로 centerTitle은 null이고, 동작은 플래티폼에 따라 다릅니다: Android에서는 제목이 왼쪽 정렬, iOS에서는 가운데 정렬됩니다. 두 플래티폼 모두에서 강제로 가운데 정렬하려면 centerTitle: true를 명시적으로 설정하세요. leading으로 인해 제목이 가운데에 정렬되지 않는 경우, leading이 null이 아닌지 확인하세요 — 그의 존재가 제목을 오른쪽으로 밀어냅니다.

요약

  • AppBar — 제목, leading, actions 및 TabBar용 bottom이 있는 Flutter의 표준 상단 패널, 자동 SafeArea 처리
  • Title — 패널의 중앙 요소, centerTitle을 통한 가운데 정렬 설정으로 모든 위젯 수락
  • Actions — 오른쪽의 작업 위젯 목록, 각 Material Design 표준에 따라 48dp까지 넓이
  • Leading — 왼쪽 네비게이션 버튼, 중첩 화면으로 이동시 자동으로 BackButton으로 대체
  • SliverAppBar — CustomScrollView용 AppBar 확장, 접기, 고정 및 패러랙스 효과 지원
  • Material 3 — AppBar는 forceMaterialTransparency 매개변수를 통해 Dynamic Color, 투명도 및 NavigationBar 지원
  • 커스터미이징 — backgroundColor, elevation, foregroundColor 및 shadowColor 필드를 통해 프로젝트 디자인에 맞게 정확한 시각 조정 가능

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기