Flutter CustomScrollView


Flutter CustomScrollView (커스텀스크롤뷰)

`CustomScrollView`는 Flutter에서 스크롤 가능한 여러 위젯들을 커스터마이징하여 배치할 수 있는 위젯입니다. `CustomScrollView`는 다양한 스크롤 효과와 레이아웃을 만들 수 있게 해줍니다. 보통 `Sliver` 위젯들과 함께 사용되며, `ListView`, `GridView`와 같은 일반적인 스크롤 위젯들보다 더 유연한 레이아웃을 만들 수 있습니다.

▶ 주요 개념 및 구성 요소

1. Slivers:
   – `CustomScrollView`는 `Sliver` 위젯들의 리스트를 포함합니다.
   – `Sliver`는 스크롤 가능한 영역을 의미하며, 각기 다른 종류의 스크롤 가능한 영역을 정의할 수 있습니다.
   – 예를 들어, `SliverList`, `SliverGrid`, `SliverAppBar`, `SliverPadding` 등이 있습니다.

2. ScrollController:
   – 스크롤의 위치를 제어하고, 위치 변화를 감지할 수 있는 컨트롤러입니다.
   – `CustomScrollView`에 `ScrollController`를 전달하여 스크롤 위치를 조작하거나 감시할 수 있습니다.

▶ 주요 Sliver 위젯들

– SliverAppBar:
  – 스크롤할 때 축소되는 앱바를 만들 수 있습니다. 스크롤 시에 헤더 부분이 자연스럽게 작아지거나 사라지도록 할 수 있습니다.

– SliverList:
  – 스크롤 가능한 리스트를 만들 수 있습니다. 리스트 항목들은 동적으로 생성될 수 있으며, 필요할 때만 렌더링됩니다.

– SliverGrid:
  – 그리드 형태로 스크롤 가능한 레이아웃을 만들 수 있습니다.

– SliverToBoxAdapter:
  – Sliver가 아닌 일반적인 박스 위젯들을 Sliver 컨텍스트에서 사용할 수 있게 합니다.

▶ 예제 코드

아래는 `CustomScrollView`와 몇 가지 기본적인 `Sliver` 위젯들을 사용하는 예제입니다.

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: <Widget>[
            SliverAppBar(
              expandedHeight: 200.0,
              flexibleSpace: FlexibleSpaceBar(
                title: Text('SliverAppBar'),
                background: Image.network(
                  'https://example.com/image.jpg',
                  fit: BoxFit.cover,
                ),
              ),
              floating: true,
              snap: true,
              pinned: true,
            ),
            SliverList(
              delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
                  return ListTile(
                    title: Text('Item #$index'),
                  );
                },
                childCount: 20,
              ),
            ),
            SliverGrid(
              delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
                  return Container(
                    color: index.isOdd ? Colors.amber : Colors.blue,
                    height: 150.0,
                  );
                },
                childCount: 20,
              ),
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 2,
                mainAxisSpacing: 10.0,
                crossAxisSpacing: 10.0,
                childAspectRatio: 2.0,
              ),
            ),
          ],
        ),
      ),
    );
  }
}


▶ 주요 특징
– 확장 가능한 AppBar: `SliverAppBar`를 통해 스크롤 시 확장되고 축소되는 앱바를 만들 수 있습니다.
– 동적 리스트: `SliverList`와 `SliverChildBuilderDelegate`를 통해 스크롤 시에만 항목을 렌더링하여 성능을 최적화할 수 있습니다.
– 그리드 레이아웃: `SliverGrid`를 사용하여 다양한 그리드 레이아웃을 구현할 수 있습니다.

`CustomScrollView`는 복잡한 스크롤 가능한 레이아웃을 만들 때 매우 유용하며, 다양한 `Sliver` 위젯들을 조합하여 유연한 UI를 구현할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *