[flutter] 스크롤 시 플러터 앱에서 sticky 헤더 만들기

Flutter는 훌륭한 모바일 앱 개발 프레임워크로서, 다양한 사용자 인터페이스 요구에 맞게 커스터마이즈할 수 있는 기능을 제공합니다. 이 중에서도 스크롤 시 Sticky 헤더를 만들어 사용자가 앱 내에서 항상 헤더를 볼 수 있도록 만드는 방법을 알아보겠습니다.

1. SliverAppBar 사용하기

SliverAppBar 위젯을 사용하여 스크롤 시 Sticky 헤더를 만들 수 있습니다. SliverAppBar는 스크롤되는 내용으로부터 별도로 격리된 헤더 영역을 만들어줍니다.

CustomScrollView(
  slivers: <Widget>[
    SliverAppBar(
      pinned: true,  // 스크롤 시 헤더 고정
      title: Text('Sticky Header'),  // 헤더 타이틀
      // 추가적인 스타일링 및 설정
      // ...
    ),
    // 스크롤 가능한 콘텐츠 위젯 추가
    // ...
  ],
);

위의 코드에서 CustomScrollView는 스크롤이 가능한 콘텐츠를 감싸는 부모 위젯입니다. SliverAppBar은 스크롤과 독립적으로 동작하는 헤더를 생성합니다. pinned 속성은 헤더를 스크롤 할 때 항상 화면 상단에 고정하도록 설정하는 역할을 합니다.

2. 보조 스크롤러 구현하기

SliverAppBar을 사용하면 해당 헤더만 화면 상단에 고정되고 스크롤되는 내용은 그 아래에 표시됩니다. 하지만 다른 요소들과 함께 스크롤되는 헤더를 만들기 위해서는 SliverList 또는 SliverGrid와 같은 슬리버 위젯과 함께 사용해야 합니다.

CustomScrollView(
  slivers: <Widget>[
    SliverAppBar(
      pinned: true,
      title: Text('Sticky Header'),
      // 추가적인 스타일링 및 설정
      // ...
    ),
    SliverList(
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return ListTile(
            title: Text('List Item $index'),
          );
        },
        childCount: 100,  // 리스트 아이템 개수
      ),
    ),
  ],
);

위의 코드에서 SliverList는 스크롤 가능한 목록을 만들어줍니다. delegate 속성은 빌더 메서드를 이용하여 각 목록 아이템을 생성합니다. 위의 예시에서는 간단하게 ListTile 위젯을 사용하여 각 아이템을 표시했습니다.

3. 그 외의 커스터마이즈

SliverAppBar 위젯을 사용하여 Sticky 헤더를 만드는 것 외에도 다양한 커스터마이즈 옵션을 사용할 수 있습니다. 예를 들어, 헤더의 배경색을 변경하거나, 텍스트 스타일을 조정하는 등의 작업을 할 수 있습니다. 자세한 내용은 공식 문서를 참조하시기 바랍니다.

결론

위의 방법을 사용하여 Flutter 앱에서 스크롤 시 Sticky 헤더를 구현할 수 있습니다. SliverAppBar와 다른 슬리버 위젯을 함께 사용하면 헤더와 내용이 같이 스크롤되는 아름다운 사용자 인터페이스를 만들 수 있습니다.