Perfetto trace 显示 Compose:onForgotten 耗时 600ms,根因是 if(!isYearView)/if(isYearView) 条件渲染导致整棵子树在切换时被销毁重建。 修复: 1. 月视图和年视图始终共存于组合树中 2. 通过 Modifier.alpha() 控制可见性和触摸事件分发 3. graphicsLayer 仅保留 scale 动画,alpha 移出到 Modifier 层 4. 简化 toggleYearView():移除 withFrameNanos/animJob.join() 的复杂协程逻辑 两个视图通过 yearViewProgress 驱动的交叉淡入淡出同步切换, 消除 onForgotten 的组件销毁开销。
YaYa
基于 Kotlin Multiplatform 与 Compose Multiplatform 的日历应用,Android 和 iOS 共享 UI。
月视图与周视图之间支持流畅的折叠/展开过渡——拖拽切换,弹簧动画自动吸附。无限分页,ISO 8601 周起始,Material 3。
构建
# Android
./gradlew :androidApp:assembleDebug
# iOS — 在 Xcode 中打开 iosApp/ 运行
技术栈
- Kotlin 2.3 · Compose Multiplatform 1.10 · Material 3
kotlinx-datetime处理所有日期逻辑- 双模块:
:shared(UI + 逻辑)·:androidApp(薄壳)
Description
Languages
Kotlin
77.3%
Shell
18.7%
PowerShell
4%