IOS-INFO-015 P0 | 标记已读 UI / 状态联动 【审计: 不存在】 #80

Closed
opened 2026-06-07 11:55:29 +08:00 by wangdl · 1 comment
Owner

与 IOS-INFO-010 的区别

IOS-INFO-010: Runtime 层,产生 marked_as_read 事件
IOS-INFO-015: UI/状态层,按钮、乐观更新、资料详情/阅读页状态联动

点击→乐观更新→事件→队列→上传。失败时保留队列。permanent failed 有提示。

## 与 IOS-INFO-010 的区别 IOS-INFO-010: Runtime 层,产生 marked_as_read 事件 IOS-INFO-015: UI/状态层,按钮、乐观更新、资料详情/阅读页状态联动 点击→乐观更新→事件→队列→上传。失败时保留队列。permanent failed 有提示。
wangdl added this to the M-IOS-INFO:学习信息采集、上传、继续学习与基础分析闭环 milestone 2026-06-07 11:55:29 +08:00
wangdl changed title from IOS-INFO-012 P0 | UploadScheduler / 重试策略 to IOS-INFO-015 P0 | 标记已读 UI / 状态联动 【审计: 不存在】 2026-06-07 12:20:50 +08:00
Author
Owner

完成报告

交付

MaterialReaderView.swift — 标记已读 UI + 状态联动:

1. 工具栏按钮 — checkmark.circle 图标,已读变绿色实心:

Button { markAsRead() } label: {
    Image(systemName: isMarkedRead ? "checkmark.circle.fill" : "checkmark.circle")
        .foregroundColor(isMarkedRead ? Color.green : Color.zxF05)
}

2. 乐观更新 — 点击立即更新 UI,不等待网络:

@State private var isMarkedRead = false

private func markAsRead() {
    guard !isMarkedRead else { return }  // 防重复点击
    isMarkedRead = true                   // 乐观更新
    sessionManager.markAsRead()           // V2 事件→队列→上传
    collector.markAsRead(materialId:)     // V1 fallback
}
## 完成报告 ### 交付 `MaterialReaderView.swift` — 标记已读 UI + 状态联动: **1. 工具栏按钮** — checkmark.circle 图标,已读变绿色实心: ```swift Button { markAsRead() } label: { Image(systemName: isMarkedRead ? "checkmark.circle.fill" : "checkmark.circle") .foregroundColor(isMarkedRead ? Color.green : Color.zxF05) } ``` **2. 乐观更新** — 点击立即更新 UI,不等待网络: ```swift @State private var isMarkedRead = false private func markAsRead() { guard !isMarkedRead else { return } // 防重复点击 isMarkedRead = true // 乐观更新 sessionManager.markAsRead() // V2 事件→队列→上传 collector.markAsRead(materialId:) // V1 fallback } ```
Sign in to join this conversation.
No description provided.