2장 - Sliver의 주요 위젯들
Sliver 위젯은 다양한 종류가 있습니다. 각각의 용도와 기능에 따라 원하는 레이아웃을 구축할 수 있습니다. 이번 장에서는 몇 가지 주요 Sliver 위젯들을 소개하겠습니다.
1. SliverAppBar
<SliverAppBar> 위젯은 스크롤이 상단으로 넘어갈 때, 앱 바를 축소하며 스크롤이 내려갈 때 다시 확장하는 동적인 앱 바입니다. 주로 CustomScrollView 위젯과 함께 사용되며, 패럴랙스 효과 등 고급 애니메이션을 쉽게 구현할 수 있습니다.
예시 코드:
CustomScrollView(
slivers: [
SliverAppBar(
expandedHeight: 200.0,
title: Text('SliverAppBar'),
flexibleSpace: FlexibleSpaceBar(
background: Image.asset('images/background.jpg', fit: BoxFit.cover),
),
),
...// 다른 sliver 위젯들
],
)
2. SliverList
<SliverList> 위젯은 일반적인 리스트와 유사하며, 스크롤 가능한 아이템들을 일렬로 나열합니다. 이 위젯은 여러 개의 목록 아이템을 포함하며, 일반 리스트 구조를 만들 수 있습니다.
예시 코드:
SliverList(
delegate: SliverChildListDelegate([
ListTile(title: Text('Item 1')),
ListTile(title: Text('Item 2')),
ListTile(title: Text('Item 3')),
... // 더 많은 리스트 아이템
]),
)
3. SliverGrid
<SliverGrid> 위젯은 각 아이템이 격자 구조로 배치되는 스크롤 가능한 그리드를 생성합니다. 이 위젯은 일반 그리드 뷰와 유사하되, 더 복잡한 레이아웃 조건과 함께 사용되는 경우에 적합합니다.
예시 코드:
SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
color: Colors.red,
child: Center(
child: Text('Item $index'),
),
);
},
childCount: 20,
),
)
이 외에도 SliverFillViewport, SliverFixedExtentList 등 많은 Sliver 위젯들이 있습니다. 각각의 용도에 맞는 Sliver 위젯을 활용하여 다양한 레이아웃을 구성할 수 있습니다. 다음 장에서는 이러한 Sliver를 이용해 실제로 어떻게 다양한 레이아웃을 구성하는지 알아보겠습니다.
3장 - Sliver를 이용한 다양한 레이아웃 구성하기
Sliver 위젯을 이용하여 다양한 스크롤이 있는 레이아웃을 구현할 수 있습니다. 이번 장에서는 Sliver를 활용하여 몇 가지 일반적인 레이아웃을 설계하는 방법을 알아봅시다.
1. 스크롤 시 다이나믹한 앱바 움직임 구현하기
플러터에서 <SliverAppBar>를 사용하면 스크롤 시 동적인 움직임을 쉽게 구현할 수 있습니다. 스크롤 시 앱바가 축소되거나 확장되는 것은 사용자에게 인터랙티브한 경험을 제공합니다.
CustomScrollView(
slivers: [
SliverAppBar(
expandedHeight: 200.0,
title: Text('Dynamic App Bar'),
flexibleSpace: FlexibleSpaceBar(
background: Image.asset('images/background.jpg', fit: BoxFit.cover),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ListTile(title: Text('Item $index'));
},
childCount: 50,
),
),
],
)
2. 스크롤 가능한 그리드와 리스트 결합하기
일반적인 그리드와 리스트를 결합하여 스크롤 가능한 영역을 구현할 수 있습니다. 이렇게하면 사용자가 완전히 다른 유형의 콘텐츠를 한 화면에서 쉽게 탐색할 수 있습니다.
CustomScrollView(
slivers: [
SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
color: Colors.green,
child: Center(
child: Text('Grid Item $index'),
),
);
},
childCount: 10,
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ListTile(title: Text('List Item $index'));
},
childCount: 20,
),
),
],
)
3. 다양한 슬라이버 위젯 조합으로 복잡한 레이아웃 구성하기
복잡한 스크롤 레이아웃을 구현하기 위해서는 여러 유형의 Sliver 위젯을 조합할 수 있습니다. 이를 통해 사용자는 동일한 페이지에서 다양한 유형의 콘텐츠를 쉽게 탐색하고 제공받을 수 있습니다.
CustomScrollView(
slivers: [
SliverAppBar(
expandedHeight: 200.0,
title: Text('Complex Layout'),
flexibleSpace: FlexibleSpaceBar(
background: Image.asset('images/background.jpg', fit: BoxFit.cover),
),
),
SliverToBoxAdapter(
child: Container(
height: 100.0,
color: Colors.orange,
child: Center(
child: Text('SliverToBoxAdapter'),
),
),
),
SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
color: Colors.blue,
child: Center(
child: Text('Grid Item $index'),
),
);
},
childCount: 6,
),
),
SliverFixedExtentList(
itemExtent: 50.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ListTile(title: Text('Fixed Extent Item $index'));
},
childCount: 20,
),
),
SliverFillRemaining(
hasScrollBody: false,
child: Container(
color: Colors.purple,
child: Center(child: Text('SliverFillRemaining')),
),
),
],
)
Sliver를 효과적으로 사용하면 다양한 스크롤 가능한 레이아웃을 구성할 수 있습니다. 이를 통해 사용자는 앱의 정보 구성과 상호작용이 더 쉽고 더 풍부한 경험을 얻을 수 있습니다. 다음 장에서는 Sliver를 활용한 실전 앱 개발 예제를 살펴봅시다.
4. 실전 예시로 살펴보는 Slivers 활용 방법
이번 장에서는 실전적인 예시를 통해 Slivers를 어떻게 활용할 수 있는지 살펴보겠습니다.
1. 페이스북 뉴스 피드 스타일 레이아웃 구현하기
페이스북 뉴스 피드 스타일의 레이아웃은 정보가 계속해서 스크롤되는 형태를 가지고 있습니다. Slivers를 사용하여 이와 유사한 레이아웃을 구현해보겠습니다.
CustomScrollView(
slivers: [
SliverAppBar(
expandedHeight: 200.0,
title: Text('Facebook News Feed Style'),
flexibleSpace: FlexibleSpaceBar(
background: Image.asset('images/header.jpg', fit: BoxFit.cover),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
height: 100,
child: Card(
child: InkWell(
onTap: () {
// Add your onTap action here
},
child: Container(
padding: EdgeInsets.all(10),
child: Text('News Feed Item $index'),
),
),
),
);
},
childCount: 20,
),
),
SliverFillRemaining(
hasScrollBody: false,
child: Container(
color: Colors.blue,
child: Center(child: Text('End of Feed')),
),
),
],
)
2. 상품 목록과 상세 정보를 함께 보여주는 레이아웃 구현하기
Sliver를 활용하여 상품들의 목록과 함께, 스크롤 시 상세 정보도 같이 표시되는 레이아웃을 만들어 봅시다.
CustomScrollView(
slivers: [
SliverAppBar(
expandedHeight: 100.0,
title: Text('Product List & Details'),
flexibleSpace: FlexibleSpaceBar(
background: Image.asset('images/header.jpg', fit: BoxFit.cover),
),
),
SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Card(
child: InkWell(
onTap: () {
// Add your onTap action here
},
child: Container(
padding: EdgeInsets.all(10),
child: Text('Product $index'),
),
),
);
},
childCount: 6,
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ListTile(title: Text('Product Detail $index'));
},
childCount: 6,
),
),
SliverFillRemaining(
hasScrollBody: false,
child: Container(
color: Colors.orange,
child: Center(child: Text('End of Product List')),
),
),
],
)
이처럼 Slivers를 활용하면 다양한 스크롤 레이아웃을 구현할 수 있습니다. 사용자들은 Slivers를 통해 앱의 정보 구조와 상호작용이 더 쉽고 풍부해지는 경험을 만끽할 수 있습니다. 다음 장에서는 Slivers를 사이즈 및 위치 조절을 어떻게 할 수 있는지 살펴보겠습니다.
제 5장 - 슬리버의 크기 및 위치 조절하기
이 장에서는 슬리버의 크기 및 위치를 조절하는 방법을 살펴보겠습니다.
1. SliverAppBar의 위치 변경하기
SliverAppBar의 위치를 변경하려면 'pinned' 및 'floating' 속성을 사용할 수 있습니다.
- Pinned: SliverAppBar를 최상단에 고정하려면 pinned 속성을 true로 설정하십시오.
SliverAppBar(
pinned: true,
title: Text('Pinned AppBar'),
)
- Floating: 사용자가 스크롤을 시작하면 SliverAppBar가 바로 표시되도록 하려면 floating 속성을 true로 설정하십시오.
SliverAppBar(
floating: true,
title: Text('Floating AppBar'),
)
2. SliverList 및 SliverGrid 간 여백 조절하기
SliverList 및 SliverGrid 간 여백을 조절하려면 SizedBox 또는 SliverPadding을 사용하십시오.
- SliverList와 SliverGrid 사이의 여백을 추가하는 방법:
CustomScrollView(
slivers: [
SliverList(
// ...
),
SizedBox(height: 20),
SliverGrid(
// ...
),
],
)
- 여백을 유지하면서 SliverList의 컨텐츠를 추가하는 방법:
CustomScrollView(
slivers: [
SliverPadding(
padding: EdgeInsets.symmetric(vertical: 10),
sliver: SliverList(
// ...
),
),
SliverGrid(
// ...
),
],
)
3. 슬리버의 크기 조절하기
슬리버의 크기를 조절하려면 SliverToBoxAdapter를 사용합니다.
CustomScrollView(
slivers: [
SliverToBoxAdapter(
child: Container(
height: 300,
color: Colors.orange,
),
),
SliverGrid(
// ...
),
],
)
이상으로 슬리버의 크기 및 위치를조절하는 방법에 대해 살펴보았습니다. 앞서 제공한 예제들을 참고하시어 다양한 스크롤 레이아웃을 만들어 보시기 바랍니다. 기존보다 사용자 경험을 향상시키는 더 풍부한 앱 구조와 상호작용을 즐기실 수 있습니다.
0 개의 댓글:
Post a Comment