Flutter SliverAppBar는 스크롤 가능한 레이아웃에서 자주 사용되는 위젯입니다. SliverAppBar는 스크롤 시 숨기거나 고정할 수 있는 애니메이티드 앱바로, 보다 다이나믹한 앱 인터페이스를 구현할 때 유용합니다. 이 글에서는 Flutter의 SliverAppBar에 대해 알아보고, 실용적인 예시와 함께 활용 방법을 설명합니다.

목차
SliverAppBar란?
정의 및 개념
SliverAppBar는 Flutter의 Material 디자인 패키지에 포함된 위젯으로, 스크롤 할 때 확장되고 축소되는 앱바입니다. SliverAppBar는 일반 AppBar와 유사해 보이지만, 더 많은 커스터마이즈 옵션과 스크롤 동작을 지원합니다.
주요 특징
- 스크롤 동작: 스크롤 시 확장되거나 축소되는 동작을 지원합니다.
- 고정 및 고정 해제: 지정된 조건에 따라 앱바를 고정하거나 고정 해제할 수 있습니다.
- 유연한 레이아웃: 기본 앱바 UI 외에도 사용자 정의 위젯을 추가할 수 있습니다.
SliverAppBar 사용법
다음은 기본적인 SliverAppBar를 구현하는 방법입니다.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: CustomScrollView(
slivers: [
SliverAppBar(
title: Text('Flutter SliverAppBar'),
floating: false,
pinned: true,
snap: false,
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(background: FlutterLogo()),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => ListTile(title: Text('Item #$index')),
childCount: 50,
),
),
],
),
),
);
}
}
SliverAppBar 속성 설명
- floating: true로 설정하면 스크롤 할 때 빠르게 나타납니다.
- pinned: true로 설정하면 앱바가 스크롤 상단에 고정됩니다.
- snap: floating이 true일 때, 스크롤할 때 빠르게 나타납니다.
- expandedHeight: SliverAppBar가 확장될 때의 최대 높이입니다.
- flexibleSpace: 확장 시 표시되는 내용입니다. 일반적으로 이미지를 사용합니다.
SliverAppBar 커스터마이징
SliverAppBar는 다양한 속성을 통해 고도로 커스터마이징할 수 있습니다. 예를 들어, 배경 이미지, 그라데이션, 사용자 정의 위젯 등을 추가할 수 있습니다.
SliverAppBar(
title: Text('Flutter SliverAppBar'),
floating: true,
pinned: true,
snap: true,
expandedHeight: 250.0,
flexibleSpace: FlexibleSpaceBar(
title: Text('Flexible Space'),
background: Stack(
fit: StackFit.expand,
children: [
Image.network(
'https://example.com/image.jpg',
fit: BoxFit.cover,
),
const DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment(0.0, 0.5),
end: Alignment(0.0, 0.0),
colors: <Color>[
Color(0x60000000),
Color(0x00000000),
],
),
),
),
],
),
),
)SliverAppBar와 다른 위젯 결합하기
SliverAppBar는 CustomScrollView와 함께 사용됩니다. CustomScrollView의 다른 슬리버 위젯과 결합하여 복잡한 스크롤 레이아웃을 구현할 수 있습니다.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: CustomScrollView(
slivers: [
SliverAppBar(
title: Text('Flutter SliverAppBar'),
floating: true,
pinned: true,
snap: true,
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
title: Text('Flexible Space'),
background: FlutterLogo(),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => ListTile(title: Text('Item #$index')),
childCount: 20,
),
),
SliverFillRemaining(
child: Center(
child: Text('No more items'),
),
)
],
)),
);
}
}

SliverAppBar 활용 사례
뉴스 피드
SliverAppBar는 뉴스 피드와 같은 스크롤 레이아웃에서 자주 사용됩니다. 사용자에게 상단 이미지를 제공하고, 스크롤할 때 헤더를 축소하는 방식으로 뉴스 기사를 읽기 쉽게 만듭니다.
프로필 화면
사용자의 프로필 페이지에서도 SliverAppBar를 활용할 수 있습니다. 사용자 사진이 상단에 크게 표시되고, 스크롤할 때 정보가 축소됩니다.
대시보드
데이터 대시보드에서 중요한 그래프나 차트를 상단에 배치하고, 사용자 스크롤에 따라 콘텐츠를 표시하도록 할 수 있습니다.