SliverToBoxAdapter
는 Flutter에서 CustomScrollView
와 같은 슬리버를 사용하는 스크롤 가능한 영역에서 일반적인 위젯을 사용할 수 있게 해주는 특별한 위젯입니다. 이를 사용함으로써, 슬리버가 아닌 일반 위젯을 슬리버 리스트 안에 넣을 수 있습니다.
슬리버 아닌 위젯 사용: CustomScrollView
는 SliverAppBar
, SliverList
, SliverGrid
와 같은 슬리버 위젯들을 자식으로 가질 수 있습니다. 하지만, 때때로 일반 위젯(예: Container
, Column
, Row
)을 이런 스크롤 가능한 리스트에 넣고 싶을 수 있습니다. SliverToBoxAdapter
를 사용하면 이를 가능하게 합니다.
간단한 포함: SliverToBoxAdapter
안에 일반 위젯을 넣으면, 그 위젯은 슬리버 리스트의 일부처럼 스크롤 됩니다.
CustomScrollView(
slivers: <Widget>[
SliverAppBar(
// ... SliverAppBar 설정
),
SliverToBoxAdapter(
child: Container(
height: 200.0,
color: Colors.blue,
child: Center(
child: Text("일반 위젯"),
),
),
),
SliverList(
// ... SliverList 설정
),
],
)
이 예시에서 SliverAppBar
와 SliverList
사이에 Container
위젯을 SliverToBoxAdapter
로 감싸서 사용하고 있습니다. 이렇게 하면 Container
는 슬리버 리스트의 일부처럼 스크롤 되며, 전체적인 레이아웃을 유연하게 구성할 수 있습니다.
SliverToBoxAdapter
는 CustomScrollView
와 같은 슬리버 기반의 스크롤 가능한 리스트에서 일반 위젯을 사용할 수 있게 해주는 유용한 위젯입니다. 이를 통해 슬리버가 아닌 위젯을 스크롤 가능한 리스트의 일부로 포함시킬 수 있습니다.
SliverToBoxAdapter
는 Flutter에서 매우 유용한 위젯 중 하나입니다. 기본적으로, CustomScrollView
는 Sliver
위젯들만 자식으로 받아들입니다. 그런데 때로는 일반적인 위젯(예: Container
, Column
, Row
등)을 CustomScrollView
안에 넣고 싶을 때가 있습니다. 이런 경우 SliverToBoxAdapter
를 사용하여 일반 위젯을 Sliver
로 변환할 수 있습니다.
CustomScrollView(
slivers: <Widget>[
SliverAppBar(
title: Text('SliverToBoxAdapter 예제'),
),
SliverToBoxAdapter(
child: Container(
height: 200.0,
color: Colors.red,
child: Center(
child: Text('이것은 일반 Container입니다.'),
),
),
),
// 여기에 다른 slivers를 계속 추가할 수 있습니다.
],
)
위 예제에서 SliverToBoxAdapter
는 Container
를 CustomScrollView
내에 포함시키기 위해 사용되었습니다.
SliverToBoxAdapter
를 사용할 때는 내부에 있는 위젯의 크기가 고정되어 있어야 합니다. 만약 그렇지 않다면 오류가 발생할 수 있습니다. SliverList
나 SliverGrid
등을 사용).요약하면, SliverToBoxAdapter
는 CustomScrollView
내에서 일반 위젯을 사용할 때 필요한 브리지 역할을 하는 위젯입니다.
SliverToBoxAdapter:
SliverToBoxAdapter
는 기본적으로 일반적인 위젯(Box
위젯)을 sliver
위젯으로 변환하는 데 사용됩니다. 일반적인 위젯을 CustomScrollView
안에서 사용하고자 할 때, 이 위젯을 사용해서 변환해주어야 합니다.
예를 들어, Column
이나 Container
와 같은 일반적인 위젯을 CustomScrollView
에 바로 추가할 수 없습니다. 그러나 SliverToBoxAdapter
를 사용하면 이러한 위젯을 추가할 수 있게 됩니다.
SliverToBoxAdapter(
child: Column(
children: const [
CircleAvatar(
backgroundColor: Colors.red,
radius: 20,
)
],
),
)
위 코드에서는 CircleAvatar
를 포함하는 Column
을 CustomScrollView
에 추가하기 위해 SliverToBoxAdapter
를 사용하였습니다.
SliverPersistentHeader:
SliverPersistentHeader
는 스크롤 가능한 영역 내에서 헤더가 계속 화면에 보이도록 하는 역할을 합니다. 이 위젯은 delegate
속성을 통해 구성되며, SliverPersistentHeaderDelegate
를 확장하는 클래스를 제공하여 사용자 지정 헤더를 정의할 수 있습니다.
SliverPersistentHeader(
delegate: CustomDelegate(),
floating: true,
)
floating
: 헤더가 스크롤 다운(위로 스크롤) 시 바로 나타나게 할 것인지 결정합니다.CustomDelegate
클래스에서는 여러 메서드와 속성들이 정의되어 있습니다:
build
: 실제 헤더 위젯을 생성합니다.maxExtent
: 헤더의 최대 높이를 지정합니다.minExtent
: 헤더의 최소 높이를 지정합니다.shouldRebuild
: 헤더를 다시 빌드해야 하는지 결정하는 데 사용됩니다.위 코드에서 CustomDelegate
는 커스텀 헤더를 정의하는 데 사용되며, Container
위젯을 통해 헤더 내용을 표시합니다.
요약하면, SliverToBoxAdapter
는 일반 위젯을 sliver로 변환하는 역할을 하며, SliverPersistentHeader
는 사용자 지정 헤더를 제공하는 역할을 합니다. 이러한 sliver 위젯들은 CustomScrollView
내에서 사용되어 효과적인 스크롤 뷰를 구성할 수 있게 합니다.
물론이죠, 코드에 따라 자세하게 설명하겠습니다.
CustomScrollView:
UserProfileScreen
의 build
메서드 내에서 CustomScrollView
를 사용합니다. CustomScrollView
는 여러 개의 sliver
위젯을 통합하여 사용하기 위한 스크롤 가능한 뷰를 제공합니다.
SliverAppBar:
SliverAppBar(
stretch: true,
backgroundColor: Colors.teal,
collapsedHeight: 80,
expandedHeight: 200,
flexibleSpace: FlexibleSpaceBar(
...
),
)
collapsedHeight
: 앱 바가 축소될 때의 높이를 지정합니다.expandedHeight
: 앱 바가 확장될 때의 최대 높이를 지정합니다.flexibleSpace
: 확장 및 축소되는 영역에서 어떻게 보여질지를 정의하는 위젯입니다.SliverToBoxAdapter:
SliverToBoxAdapter(
child: Column(
children: const [
CircleAvatar(
backgroundColor: Colors.red,
radius: 20,
)
],
),
)
SliverToBoxAdapter
는 일반 위젯(여기서는 Column
)을 sliver
로 변환하여 CustomScrollView
에 포함시킬 수 있게 해줍니다.
SliverFixedExtentList:
SliverFixedExtentList(
...
itemExtent: 100,
)
이 위젯은 각 항목의 고정된 높이(itemExtent
)를 가진 목록을 생성합니다.
SliverPersistentHeader:
SliverPersistentHeader(
delegate: CustomDelegate(),
floating: true,
)
delegate
: SliverPersistentHeaderDelegate
를 확장하여 커스텀 헤더의 동작 및 디자인을 정의합니다.floating
: true로 설정하면 사용자가 위로 스크롤할 때 헤더가 바로 나타납니다.SliverGrid:
SliverGrid(
...
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
...
),
)
SliverGrid
는 그리드 레이아웃을 생성합니다. 여기서 사용된 SliverGridDelegateWithMaxCrossAxisExtent
는 각 그리드 항목의 최대 크로스 축 길이를 지정하여 그리드 항목의 크기와 배치를 제어합니다.
CustomDelegate:
class CustomDelegate extends SliverPersistentHeaderDelegate {
...
}
이 클래스는 SliverPersistentHeader
의 delegate
를 위한 커스텀 클래스입니다. 여기서 헤더의 레이아웃과 어떻게 보여질지를 정의하며, 최소 및 최대 높이도 지정합니다.