From 06cd3916e34e5e0180d9dbf90be5057a62caea68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E9=B2=81=E6=AD=A3?= <13780741225@163.com> Date: Thu, 10 Sep 2026 12:32:29 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20Task=2012=20=E7=9D=A1=E7=9C=A0=E5=8C=BA?= =?UTF-8?q?=E5=9D=97=E5=8E=BB=E6=8E=89=E6=81=92=E7=9C=9F=E5=88=A4=E7=A9=BA?= =?UTF-8?q?=EF=BC=88ledger=20R33=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superpowers/plans/2026-09-10-ring-health-app-m0-m1.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/superpowers/plans/2026-09-10-ring-health-app-m0-m1.md b/superpowers/plans/2026-09-10-ring-health-app-m0-m1.md index 92b2526..eb13764 100644 --- a/superpowers/plans/2026-09-10-ring-health-app-m0-m1.md +++ b/superpowers/plans/2026-09-10-ring-health-app-m0-m1.md @@ -4288,8 +4288,13 @@ private fun SleepStagesCard(points: List, modifier: Modifier = Modi // 这里改成以最后一个数据点为起床时刻、往前推 8 小时作为入睡时刻 —— 一张卡片讲「一晚」。 // M3 接入真实睡眠数据后改为读取实际分期时段。 val wakeUp = points.lastOrNull()?.timestamp - val fallAsleep = wakeUp?.minus(DEMO_SLEEP_WINDOW_MILLIS) - if (fallAsleep != null && wakeUp != null) { + if (wakeUp != null) { + // 只有拿到起床时刻才渲染这一行;入睡时刻由它推出,所以判空只需判 wakeUp。 + // 原稿写的是 `if (fallAsleep != null && wakeUp != null)`,其中 `wakeUp != null` + // 恒真(fallAsleep 由 wakeUp 推出),Kotlin 会报 "Condition is always 'true'" 告警 + // (ledger Ruling R33)。语义与上式完全等价:wakeUp 为 null 时两者皆 null,跳过; + // 否则 fallAsleep 必然非空,渲染。 + val fallAsleep = wakeUp - DEMO_SLEEP_WINDOW_MILLIS Row( modifier = Modifier.fillMaxWidth().padding(top = 12.dp), horizontalArrangement = Arrangement.SpaceBetween,