SliverAppBar
앱의 스크롤에 따라 모양이 변하는 app bar를 말한다.
Body에 List뷰를 사용했을때 상단 AppBar가 확장되거나
내가 스크롤하는 움직임에 따라서 변화를 주고 싶을 때 주로 사용합니다.
SliverAppBar는 3단어로 구성되어있다.
CustomScrollView, SliverAppBar,SliverList
여기서 Sliver란 CustomScrollView를 만들때 CustomScrollView의 하위항목으로 제공되는 scrollable한 위젯들을 Sliver라고 한다.
코드
import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';
class LectureDetailPage extends StatelessWidget {
const LectureDetailPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return LayoutBuilder(
// layoutBuilder안에 넣는 이유는 해당디바이스 사이즈를 알기위해서 넣어준다.
builder: (context, constrains) {
Size _size = MediaQuery.of(context).size; //해당 디바이스의 사이즈를 가지고 온다.
return Scaffold(
body: CustomScrollView(
slivers: [
//child같은 개념이지만 조금 다르다
SliverAppBar(
title: Text(
'Testing title',
),
pinned: true,
//리스트시 앱바가 위에 고정되게 해준다.
expandedHeight: _size.width,
//이미지보여줄 가로세로 길이를 동일하게 해준다. //디바이스 가로 길이만큼 준다.
primary: true,
flexibleSpace: Stack(
children: [
FlexibleSpaceBar(
background: SizedBox(
height: _size.width,
width: _size.width,
child: ExtendedImage.network(
"https://picsum.photos/200",
fit: BoxFit.cover,
),
),
),
FlexibleSpaceBar(
collapseMode: CollapseMode.none,
background: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.black38, Colors.transparent],
stops: [0.0,0.15]//gradient가 어떻게 자리를 잡을 것인지
)
),
),
)
],
)),
SliverList(
delegate: SliverChildBuilderDelegate((context, index) {
//builder메소드를 넣어줘야한다. CustomScrollView에 넣어줄수 있는 SliverList이다
return Container(
height: 100,
color: Colors.accents[index % Colors.accents.length],
); //index를 컬러 숫자 만큼 나눈 나머지다. accentColor가 처음부터 끝까지 실행될수 있게끔한다.
}, childCount: 20)),
//container같은 보통위젯들은 바로 주지 못한다.
//만약사용하고 싶다면 아래와 같이 SliverToBoxAdapter로 감싸준다.
//SliverToBoxAdapter(child: Container()),
],
),
);
},
);
}
}
실행결과
'Flutter' 카테고리의 다른 글
home_page (0) | 2022.12.02 |
---|---|
DropDownButton (0) | 2022.11.29 |
TextField - 사용자로 부터 정보를 입력 받는 양식 (0) | 2022.11.25 |
깊은 복사, 얕은 복사 (0) | 2022.11.25 |
레시피 앱 만들기 (0) | 2022.08.17 |