From 78b3b4121cfb4f8cab3fcae2f8703d42f7123582 Mon Sep 17 00:00:00 2001 From: caadiq Date: Wed, 1 Apr 2026 14:45:50 +0900 Subject: [PATCH] =?UTF-8?q?fix(app):=20=EC=95=A8=EB=B2=94=20=EC=83=81?= =?UTF-8?q?=EC=84=B8/=EA=B3=A1=20=EC=83=81=EC=84=B8/=EA=B0=A4=EB=9F=AC?= =?UTF-8?q?=EB=A6=AC=20=ED=99=94=EB=A9=B4=20=ED=88=B4=EB=B0=94=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=8B=9C=20=EB=8A=98=EC=96=B4=EB=82=A8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SliverAppBar에 stretch: false 명시 - CustomScrollView에 ClampingScrollPhysics 적용 (overscroll 방지) Co-Authored-By: Claude Opus 4.6 (1M context) --- app/lib/views/album/album_detail_view.dart | 32 ++++++++------------- app/lib/views/album/album_gallery_view.dart | 31 ++++++++------------ app/lib/views/album/track_detail_view.dart | 28 ++++++++---------- 3 files changed, 36 insertions(+), 55 deletions(-) diff --git a/app/lib/views/album/album_detail_view.dart b/app/lib/views/album/album_detail_view.dart index ff847cf..48f7d09 100644 --- a/app/lib/views/album/album_detail_view.dart +++ b/app/lib/views/album/album_detail_view.dart @@ -45,6 +45,17 @@ class _AlbumDetailViewState extends State { 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( future: _albumFuture, builder: (context, snapshot) { @@ -122,27 +133,8 @@ class _AlbumDetailViewState extends State { : 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), diff --git a/app/lib/views/album/album_gallery_view.dart b/app/lib/views/album/album_gallery_view.dart index 90d0d08..5cfbe19 100644 --- a/app/lib/views/album/album_gallery_view.dart +++ b/app/lib/views/album/album_gallery_view.dart @@ -36,6 +36,17 @@ class _AlbumGalleryViewState extends State { 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( future: _albumFuture, builder: (context, snapshot) { @@ -103,26 +114,8 @@ class _AlbumGalleryViewState extends State { } 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( diff --git a/app/lib/views/album/track_detail_view.dart b/app/lib/views/album/track_detail_view.dart index daa9ad7..250f477 100644 --- a/app/lib/views/album/track_detail_view.dart +++ b/app/lib/views/album/track_detail_view.dart @@ -62,6 +62,17 @@ class _TrackDetailViewState extends State { 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( future: _trackFuture, builder: (context, snapshot) { @@ -93,23 +104,8 @@ class _TrackDetailViewState extends State { 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),