# Onboarding App Shell(任务清单) > 说明:本清单根据 `plan.md` 拆解,要求“可执行、可验收、可标记”。 > 标记规则:执行完成后将对应项从 `- [ ]` 改为 `- [x]`,并把“状态”改为 **已完成**;进行中改为 **进行中**;阻塞写明原因与解除条件。 ## 0. 清单状态说明 - **状态**:未开始 / 进行中 / 已完成 / 阻塞 - **阻塞**:必须写明阻塞点与解除条件 ## 1. 路由重构(不使用 Tabs) - [ ] **移除 Tabs 导航结构,切换为 Stack + Header 入口** - **状态**:未开始 - **范围**:`client/app/(tabs)/*`、`client/app/_layout.tsx`、新增 `client/app/(app)/*`、`client/app/(onboarding)/*` - **要求**: - 首页为 `Home`(非 Tab) - 从 Home 的 Header 进入 `Favorites` 与 `Settings` - **验收**:启动后不出现 TabBar;可从 Home 进入收藏夹与设置 - [ ] **实现启动分发 `app/index.tsx`(按 onboarding 状态跳转)** - **状态**:未开始 - **规则**: - `onboarding.completed=true`:进入 `/(app)/home` - 否则进入 `/(onboarding)/onboarding` - **验收**:首次启动进入 Onboarding;完成后重启直接进 Home ## 2. 本地存储与数据模型 - [ ] **封装 AsyncStorage 访问层(统一 key 与读写)** - **状态**:未开始 - **Key**: - `onboarding.completed` - `push.promptState` - `content.reactions` - `favorites.items` - **验收**:读写都有类型约束;不会散落在 UI 代码里重复写 key - [ ] **提供本地 mock 内容列表(带稳定 id)** - **状态**:未开始 - **字段**:`id`、`text` - **验收**:Home 可稳定渲染一条内容,并能切换到下一条(如实现) ## 3. Onboarding(3–5 页,全部可跳过) - [ ] **实现 Onboarding 容器页(3–5 页)** - **状态**:未开始 - **要求**: - 显示进度(例如 `2/4`) - 每页都有“下一步”与“跳过” - 任意页有“一键跳过整个 Onboarding” - **验收**:可从任意页跳过且不阻塞进入 PushPrompt - [ ] **Onboarding 完成状态持久化** - **状态**:未开始 - **要求**:完成或整体跳过时写入 `onboarding.completed=true` - **验收**:重启 App 不再出现 Onboarding ## 4. PushPrompt(需要且可跳过) - [ ] **实现 PushPrompt 页面** - **状态**:未开始 - **按钮**: - 立即开启(触发系统权限申请) - 稍后(跳过) - **持久化**: - 立即开启:写入 `push.promptState=enabled` - 稍后:写入 `push.promptState=skipped` - **验收**:无论选择/权限结果如何,都能进入 Home ## 5. Home(点赞/讨厌) - [ ] **实现 Home 页面(内容卡片 + Like/Dislike)** - **状态**:未开始 - **要求**: - 展示一条 mock 内容 - Like / Dislike 按钮明显 - **验收**:点击 Like/Dislike 会写入本地记录 - [ ] **实现 Like=收藏规则** - **状态**:未开始 - **规则**: - Like:记录 `content.reactions[id]='like'` - Like:将 `id` 追加到 `favorites.items`(去重) - Dislike:记录 `content.reactions[id]='dislike'`(不改变出现策略) - **验收**:Like 后收藏夹可见该内容;Dislike 仅记录不影响收藏 - [ ] **在 Home Header 加入入口:收藏夹、设置** - **状态**:未开始 - **验收**:从 Home 可进入 Favorites 与 Settings ## 6. Favorites(仅展示,不可取消/清空) - [ ] **实现 Favorites 页面(只读列表)** - **状态**:未开始 - **要求**: - 展示 `favorites.items` 对应的内容 - 不提供取消收藏/清空 - **验收**:Like 的内容在此页可见;无取消入口 ## 7. Settings(version + iOS 小组件说明文案) - [ ] **实现 Settings 页面** - **状态**:未开始 - **内容**: - version 信息行(仅 version) - iOS 小组件说明卡片(美观文案) - **验收**:页面可进入,信息展示正确,文案样式不突兀 ## 8. i18n 文案补齐 - [ ] **补齐 Onboarding/Push/Home/Favorites/Settings 的 i18n key(至少 zh-CN/en)** - **状态**:未开始 - **要求**: - key 点分层:`onboarding.*`、`push.*`、`home.*`、`favorites.*`、`settings.*` - 先覆盖 `zh-CN/en`,其余语言可后续逐步补齐 - **验收**:页面不出现硬编码长句;主要文案可切换语言生效 ## 9. 自测与验收 - [ ] **流程自测(首次/非首次)** - **状态**:未开始 - **路径**: - 首次启动:Onboarding(逐页跳过/整体跳过)-> PushPrompt(开启/稍后)-> Home - 非首次:直接 Home - **验收**:与 `plan.md` 的验收清单一致