perf: remember 稳定化 lambda 和计算,减少重组传播
- weekNumber: remember(selectedDate) 缓存 getIsoWeekNumber 结果 - onDateClick/onMonthChanged/shiftKindAt: remember 稳定化,避免每次重组创建新 lambda - onRowHeightMeasured: remember 稳定化 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
6a4907f465
commit
73b176a95e
@ -200,18 +200,39 @@ fun CalendarMonthView(
|
|||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.padding(horizontal = HORIZONTAL_PADDING_DP.dp)
|
.padding(horizontal = HORIZONTAL_PADDING_DP.dp)
|
||||||
) {
|
) {
|
||||||
|
val weekNumber = remember(selectedDate) {
|
||||||
|
viewModel.getIsoWeekNumber(selectedDate)
|
||||||
|
}
|
||||||
|
val onToday = remember(viewModel, today) {
|
||||||
|
{ viewModel.selectDate(today) }
|
||||||
|
}
|
||||||
MonthHeader(
|
MonthHeader(
|
||||||
year = currentYear,
|
year = currentYear,
|
||||||
month = currentMonth,
|
month = currentMonth,
|
||||||
weekNumber = viewModel.getIsoWeekNumber(selectedDate),
|
weekNumber = weekNumber,
|
||||||
showToday = selectedDate != today,
|
showToday = selectedDate != today,
|
||||||
onToday = {
|
onToday = onToday
|
||||||
viewModel.selectDate(today)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
WeekdayHeader(
|
WeekdayHeader(
|
||||||
modifier = Modifier.fillMaxWidth().padding(bottom = ROW_PADDING_DP.dp)
|
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) {
|
with(sharedScope) {
|
||||||
CalendarPagerArea(
|
CalendarPagerArea(
|
||||||
selectedDate = selectedDate,
|
selectedDate = selectedDate,
|
||||||
@ -221,17 +242,10 @@ fun CalendarMonthView(
|
|||||||
showLegalHoliday = showLegalHoliday,
|
showLegalHoliday = showLegalHoliday,
|
||||||
rowHeightPx = rowHeightPx,
|
rowHeightPx = rowHeightPx,
|
||||||
screenWidthPx = screenWidthPx,
|
screenWidthPx = screenWidthPx,
|
||||||
onDateClick = { date -> viewModel.selectDate(date) },
|
onDateClick = onDateClick,
|
||||||
onMonthChanged = { year, month ->
|
onMonthChanged = onMonthChanged,
|
||||||
@Suppress("DEPRECATION")
|
shiftKindAt = shiftKindAt,
|
||||||
val date = if (year == today.year && today.month.number == month) today
|
onRowHeightMeasured = onRowHeightMeasured,
|
||||||
else LocalDate(year, month, 1)
|
|
||||||
viewModel.selectDate(date)
|
|
||||||
},
|
|
||||||
shiftKindAt = { date -> viewModel.shiftKindAt(date) },
|
|
||||||
onRowHeightMeasured = { h ->
|
|
||||||
if (h > 0) rowHeightPx = h
|
|
||||||
},
|
|
||||||
pagerState = pagerState,
|
pagerState = pagerState,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.sharedElement(
|
.sharedElement(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user