fix(app): 앨범 상세/곡 상세/갤러리 화면 툴바 스크롤 시 늘어남 수정

- SliverAppBar에 stretch: false 명시
- CustomScrollView에 ClampingScrollPhysics 적용 (overscroll 방지)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
caadiq 2026-04-01 14:45:50 +09:00
parent 737247eec3
commit 78b3b4121c
3 changed files with 36 additions and 55 deletions

View file

@ -45,6 +45,17 @@ class _AlbumDetailViewState extends State<AlbumDetailView> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.background,
appBar: AppBar(
backgroundColor: Colors.white,
foregroundColor: AppColors.textPrimary,
elevation: 0,
scrolledUnderElevation: 0,
leading: IconButton(
icon: const Icon(LucideIcons.arrowLeft),
onPressed: () => context.pop(),
),
title: const Text('앨범', style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600)),
),
body: FutureBuilder<Album>(
future: _albumFuture,
builder: (context, snapshot) {
@ -122,27 +133,8 @@ class _AlbumDetailViewState extends State<AlbumDetailView> {
: album.tracks?.take(5).toList();
return CustomScrollView(
physics: const ClampingScrollPhysics(),
slivers: [
//
SliverAppBar(
pinned: true,
backgroundColor: Colors.white,
foregroundColor: AppColors.textPrimary,
elevation: 0,
scrolledUnderElevation: 0,
leading: IconButton(
icon: const Icon(LucideIcons.arrowLeft),
onPressed: () => context.pop(),
),
title: const Text(
'앨범',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
),
//
SliverToBoxAdapter(
child: _HeroSection(album: album, formatDate: _formatDate),

View file

@ -36,6 +36,17 @@ class _AlbumGalleryViewState extends State<AlbumGalleryView> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.background,
appBar: AppBar(
backgroundColor: Colors.white,
foregroundColor: AppColors.textPrimary,
elevation: 0,
scrolledUnderElevation: 0,
leading: IconButton(
icon: const Icon(LucideIcons.arrowLeft),
onPressed: () => context.pop(),
),
title: const Text('컨셉 포토', style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600)),
),
body: FutureBuilder<Album>(
future: _albumFuture,
builder: (context, snapshot) {
@ -103,26 +114,8 @@ class _AlbumGalleryViewState extends State<AlbumGalleryView> {
}
return CustomScrollView(
physics: const ClampingScrollPhysics(),
slivers: [
//
SliverAppBar(
pinned: true,
backgroundColor: Colors.white,
foregroundColor: AppColors.textPrimary,
elevation: 0,
scrolledUnderElevation: 0,
leading: IconButton(
icon: const Icon(LucideIcons.arrowLeft),
onPressed: () => context.pop(),
),
title: const Text(
'앨범',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
),
//
SliverToBoxAdapter(

View file

@ -62,6 +62,17 @@ class _TrackDetailViewState extends State<TrackDetailView> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.background,
appBar: AppBar(
backgroundColor: Colors.white,
foregroundColor: AppColors.textPrimary,
elevation: 0,
scrolledUnderElevation: 0,
leading: IconButton(
icon: const Icon(LucideIcons.arrowLeft),
onPressed: () => context.pop(),
),
title: const Text('트랙', style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600)),
),
body: FutureBuilder<TrackDetail>(
future: _trackFuture,
builder: (context, snapshot) {
@ -93,23 +104,8 @@ class _TrackDetailViewState extends State<TrackDetailView> {
final youtubeVideoId = _getYoutubeVideoId(track.musicVideoUrl);
return CustomScrollView(
physics: const ClampingScrollPhysics(),
slivers: [
//
SliverAppBar(
pinned: true,
backgroundColor: Colors.white,
foregroundColor: AppColors.textPrimary,
elevation: 0,
leading: IconButton(
icon: const Icon(LucideIcons.arrowLeft),
onPressed: () => context.pop(),
),
title: const Text(
'트랙',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
),
),
//
SliverToBoxAdapter(
child: _TrackHeader(track: track),