From 73b176a95ee53d37e0931bfa699eb4889536ebf0 Mon Sep 17 00:00:00 2001 From: xfy Date: Mon, 25 May 2026 16:58:46 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20remember=20=E7=A8=B3=E5=AE=9A=E5=8C=96?= =?UTF-8?q?=20lambda=20=E5=92=8C=E8=AE=A1=E7=AE=97=EF=BC=8C=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E9=87=8D=E7=BB=84=E4=BC=A0=E6=92=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - weekNumber: remember(selectedDate) 缓存 getIsoWeekNumber 结果 - onDateClick/onMonthChanged/shiftKindAt: remember 稳定化,避免每次重组创建新 lambda - onRowHeightMeasured: remember 稳定化 Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plus/rua/project/ui/CalendarMonthView.kt | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt b/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt index 29a7729..3a9fc32 100644 --- a/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt +++ b/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt @@ -200,18 +200,39 @@ fun CalendarMonthView( .fillMaxSize() .padding(horizontal = HORIZONTAL_PADDING_DP.dp) ) { + val weekNumber = remember(selectedDate) { + viewModel.getIsoWeekNumber(selectedDate) + } + val onToday = remember(viewModel, today) { + { viewModel.selectDate(today) } + } MonthHeader( year = currentYear, month = currentMonth, - weekNumber = viewModel.getIsoWeekNumber(selectedDate), + weekNumber = weekNumber, showToday = selectedDate != today, - onToday = { - viewModel.selectDate(today) - } + onToday = onToday ) WeekdayHeader( modifier = Modifier.fillMaxWidth().padding(bottom = ROW_PADDING_DP.dp) ) + val onDateClick = remember(viewModel) { + { date: LocalDate -> viewModel.selectDate(date) } + } + val onMonthChanged = remember(viewModel, today) { + { year: Int, month: Int -> + @Suppress("DEPRECATION") + val date = if (year == today.year && today.month.number == month) today + else LocalDate(year, month, 1) + viewModel.selectDate(date) + } + } + val shiftKindAt = remember(viewModel) { + { date: LocalDate -> viewModel.shiftKindAt(date) } + } + val onRowHeightMeasured = remember { + { h: Int -> if (h > 0) rowHeightPx = h } + } with(sharedScope) { CalendarPagerArea( selectedDate = selectedDate, @@ -221,17 +242,10 @@ fun CalendarMonthView( showLegalHoliday = showLegalHoliday, rowHeightPx = rowHeightPx, screenWidthPx = screenWidthPx, - onDateClick = { date -> viewModel.selectDate(date) }, - onMonthChanged = { year, month -> - @Suppress("DEPRECATION") - val date = if (year == today.year && today.month.number == month) today - else LocalDate(year, month, 1) - viewModel.selectDate(date) - }, - shiftKindAt = { date -> viewModel.shiftKindAt(date) }, - onRowHeightMeasured = { h -> - if (h > 0) rowHeightPx = h - }, + onDateClick = onDateClick, + onMonthChanged = onMonthChanged, + shiftKindAt = shiftKindAt, + onRowHeightMeasured = onRowHeightMeasured, pagerState = pagerState, modifier = Modifier .sharedElement(