fix(chat): 首屏失败的「重试」按钮永远不出现 —— 判据极性接反(W52/E 真机验收暴露)
改了什么: - ChatScreen 里 shouldOfferRetryOnEmpty 的第三个实参从 `state.items.isEmpty()` 改成 `state.items.isNotEmpty()`。 为什么:判据是 `!loading && hasError && !hasItems`,参数语义是「列表里**有没有**东西」;调用点传的是 `isEmpty()`(极性相反),于是「列表为空」这个**唯一会求值**的场景里结论永远是 false ⇒ 按钮永远不出现。 判据单测用的是正确语义(不含调用点),所以全绿——这条只有真机才会露出来。 怎么定位的:先加一条一次性诊断日志把 UI 实际看到的三个输入打出来(`loading=false hasError=true items=0 retry=false` —— 三个输入全真而结论为假 ⇒ 只可能是极性),核对判据本体后确认;定位完日志已删。 真机复验:断网冷启动 ⇒ 「消息没能加载出来」+「重试」;恢复网络后点它 ⇒ 发出 `GET /api/v1/sessions/web/messages` 且离线期间落库的那条出现在屏幕上;按钮随列表非空消失。
This commit is contained in:
1 parent
126a706422
commit
0054a3a97a
1 file changed
+4
-1
@@ -550,7 +550,10 @@ fun ChatScreen(
|
||||
val retry = shouldOfferRetryOnEmpty(
|
||||
loading = state.loading,
|
||||
hasError = state.error != null,
|
||||
hasItems = state.items.isEmpty(),
|
||||
// ⚠️ 语义是「**有没有**东西」而不是「是不是空」——W52/E 第一版这里传了
|
||||
// `isEmpty()`,极性反了,于是「列表为空」这个唯一会求值的场景里结论**永远为假**、
|
||||
// 按钮永远不出现(判据单测用的是正确语义,所以全绿;只有真机才露出来)。
|
||||
hasItems = state.items.isNotEmpty(),
|
||||
)
|
||||
CenterHint(
|
||||
text = if (retry) FIRST_PAGE_FAILED_HINT else EMPTY_CONVERSATION_HINT,
|
||||
|
||||
Reference in new issue
Block a user