반응형
결론부터 말하면 안된다. 찾아봤는데 방법이 없다
아니 그럼 어쩌라고?
해결방법은 직접 구현하는 것이다.
하는 방법은 다음과 같다
1. Stack위젯을 만든다
2. SliverAppBar에 해당되는 부분을 Container로 만든다
3. SingleChildScrollView를 그 위에 덮는다
4. 스크롤뷰 탑에다가 패딩을 왕창 물려줘서 AppBar부분 밑까지 내려준다
5. ScrollController를 하나 만들어 스크롤뷰에 물려준다
여기서 한가지 중요한 부분이 있다.
ScrollController는 Listenable이다 !!!
한마디로 AnimatedBuilder를 사용할 수 있다는것!!!
AnimatedBuilder의 장점은 child를 이용해 위젯트리 중간에 위젯만 리빌드하면서 애니메이션을 줄 수 있다.
이를 이용해 2번에 해당되는 Container를 SliverAppBar 형태로 만들 수 있는 것이다.
아래는 대충 와꾸의 예제임
Stack(
children: [
AnimatedBuilder(
animation: _scrollController,
builder: (context, child) {
if(!_singleScroll.hasClients) return Container();
double imageHeight = _scrollController.position.pixels를 이용해 계산;
double opacity = _scrollController.position.pixels를 이용해 계산;
return Visibility(
visible: opacity > 0,
child: Opacity(
opacity: opacity,
child: Container(
height: imageHeight,
decoration: BoxDecoration(
image: DecorationImage(
image:
CachedNetworkImageProvider(viewModel.bgImgUrl),
fit: BoxFit.cover,
),
),
child: child,
),
),
);
},
child: 재활용할 위젯(),
),
SingeChildScrollView()
...
반응형
'Flutter' 카테고리의 다른 글
위젯트리에서 중간에있는 위젯만 리빌드 하고 싶을 때 (1) | 2024.07.22 |
---|---|
애니메이션을 주고싶은데 자식위젯이 너무 많을 때 (0) | 2024.07.11 |
freezed 왜씀? dart data class를 사용하자! (0) | 2024.04.16 |
CustomPainter를 redraw 하는 방법 (0) | 2024.03.15 |
덩치가 커진 위젯의 rebuild (0) | 2024.03.08 |
댓글