FLUTTER/Common

CustomScrollView

atawlee 2022. 9. 9. 00:12

Sliver를 사용하여 스크롤 효과를 만드는 스크롤뷰 입니다.

import 'package:flutter/material.dart';

class CustomExample extends StatefulWidget {
  const CustomExample({super.key});

  @override
  State createState() => _CustomExampleState();
}

class _CustomExampleState extends State {
  List top = [];
  List bottom = [0];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: CustomScrollView(
          slivers: [
            SliverAppBar(
              pinned: true, // 스크롤시 바텀 영역을 화면 상단에 남길지여부
              snap: false, // 스크롤 중간에 멈출때 appbar를 펼쳐서 배경을 모두 보여준다.
              floating: true, // false시 appbar 최상단고정
              expandedHeight: 200, //최대 확장 높이
              backgroundColor: Colors.yellow,

              //스크롤시 사라짐
              flexibleSpace: FlexibleSpaceBar(
                background: Column(children: [
                  Text(
                    "TEST CODE",
                    style: TextStyle(fontSize: 30),
                  ),
                  Icon(Icons.air_outlined)
                ]),
              ),
              //pinned시 남아있는 영역 PreferredSize로 시작할 것
              bottom: PreferredSize(
                preferredSize: Size.fromHeight(50),
                child: Container(
                  child: Column(children: [Icon(Icons.add), Text("Add")]),
                ),
              ),
            ),
            SliverFixedExtentList(
              itemExtent: 50,
              delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
                  return Container(
                    alignment: Alignment.center,
                    color: Colors.lightBlue[10 * (index % 9)],
                    child: Text('List Item $index'),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

 

Sliver관련 위젯을 쓰면 스크롤 상단에 일부의 위젯만 남는 형태의 페이지를 만들기 좋습니다. 단 사용할때 몇가지 알아야 할것들이 있습니다. 

appbar의 바텀영역은 PreferredSize로 시작해야되고

sliver []에는 sliver widget들만 넣을수 있습니다. 위에 보듯이 sliver에 들어가는 최상단 뎁스에만 sliver widget을 쓰면되고 sliver에 child , background 등으로 일반 위젯들을 추가할 수 있습니다.

상단을 고정해서 상단에서는 검색하는 기능을 넣거나 할때 유용하게 사용할 수 있을것 같습니다. 

위에 나온 위젯 외에도 sliverlist, slivergrid 등도 있으니 찾아서 사용하면 됩니다.