From 033047ebdb9e5aae76bd86c745ce1df6fe759f12 Mon Sep 17 00:00:00 2001 From: caadiq Date: Thu, 15 Jan 2026 09:40:47 +0900 Subject: [PATCH] =?UTF-8?q?perf(app/members):=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=8A=A4=EC=99=80=EC=9D=B4=ED=94=84=20=EC=84=B1=EB=8A=A5=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94=20=EB=B0=8F=20=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=9D=BC=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AnimatedBuilder child 캐싱으로 매 프레임 rebuild 방지 - RepaintBoundary 추가로 리페인트 범위 제한 - 양옆 카드 스케일 비율 조정 (0.15 → 0.25) Co-Authored-By: Claude Opus 4.5 --- app/lib/views/members/members_view.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/lib/views/members/members_view.dart b/app/lib/views/members/members_view.dart index 032f9fb..4ac9ac1 100644 --- a/app/lib/views/members/members_view.dart +++ b/app/lib/views/members/members_view.dart @@ -208,15 +208,20 @@ class _MembersViewState extends ConsumerState with TickerProviderSt itemBuilder: (context, index) { return AnimatedBuilder( animation: _pageController, + // child를 캐싱하여 매 프레임 rebuild 방지 + // RepaintBoundary로 리페인트 범위 제한 + child: RepaintBoundary( + child: _buildMemberCard(membersState.members[index], controller), + ), builder: (context, child) { double value = 1.0; if (_pageController.position.haveDimensions) { value = (_pageController.page! - index).abs(); - value = (1 - (value * 0.15)).clamp(0.0, 1.0); + value = (1 - (value * 0.25)).clamp(0.0, 1.0); } return Transform.scale( scale: Curves.easeOut.transform(value), - child: _buildMemberCard(membersState.members[index], controller), + child: child, ); }, );