Skip to content

从下载记录,收藏夹和已下载页面进入漫画详情页支持离线先本地后网络的分阶段加载#270

Open
FC383 wants to merge 32 commits into
Pacalini:masterfrom
FC383:Offline-phased-loading
Open

从下载记录,收藏夹和已下载页面进入漫画详情页支持离线先本地后网络的分阶段加载#270
FC383 wants to merge 32 commits into
Pacalini:masterfrom
FC383:Offline-phased-loading

Conversation

@FC383

@FC383 FC383 commented May 23, 2026

Copy link
Copy Markdown

漫画详情页离线体验优化方案

问题描述

进入漫画详情页时原为“全网络或全无”模式——网络请求失败则 data 为 null,直接显示 NetworkError,不展示任何信息。但本地已有的标题、封面、收藏状态、下载记录均未利用,导致离线时收藏/删除下载等操作按钮完全不可用。

解决方案

ComicPageLogic.get() 拆为两阶段:

  • 阶段1 —— 本地优先:立即从下载记录/阅读历史提取本地已保存的标题和封面,先渲染页面使操作按钮可用。
  • 阶段2 —— 网络补全:并行发起网络请求,成功后覆盖本地数据,失败则 toast 提示但不阻塞页面。

具体改动

  • ComicPageLogic 新增 networkMessageloadLocalData 字段。
  • get() 拆为两阶段,refresh_() 清空新增状态。
  • BaseComicPage 新增 loadLocalData()(默认返回 null,不影响已有子类)。
  • _ComicPageImpl.loadLocalData() 按优先级查询:下载记录 → 阅读历史。
  • loadFavorite() 改为 OR 逻辑,平台和本地任意一边收藏即为“已收藏”。
  • build() 注入 loadLocalData 回调 + 网络失败 toast。

影响范围

仅影响走 _ComicPageImpl 路径的自定义 JS 源。6 个内置源子类(PicacgComicPage 等)loadLocalData 默认 null,行为不变。

FC383 added 3 commits May 23, 2026 11:12
comic_page.dart 中 ComicPageLogic.get() 原为"全网络或全无"模式,
无网络时 data 为 null,直接显示 NetworkError,用户看不到任何信息。

改为"先本地、后网络"两阶段加载:
- 阶段1:立即从下载记录/阅读历史提取本地已有的标题、封面,
  先渲染页面使收藏/删除下载等操作按钮离线可用
- 阶段2:同时发起网络请求获取完整数据,成功后覆盖本地数据

具体改动:
- ComicPageLogic 新增 networkMessage、loadLocalData 字段
- get() 拆分为两个阶段,本地数据命中时提前 setState 渲染
- BaseComicPage 新增 loadLocalData() 方法(默认返回 null,不影响已有子类)
- _ComicPageImpl.loadLocalData() 按优先级查询下载记录→阅读历史
- loadFavorite() 改为 OR 逻辑,平台和本地任意一边收藏即为"已收藏"
- build() 注入 loadLocalData 回调,网络失败时 toast 提示
- refresh_() 清空 networkMessage 状态

仅影响走 _ComicPageImpl 路径的自定义源;
内置源的 PicacgComicPage 等子类 loadLocalData 默认 null,行为不变。
@FC383 FC383 changed the title Offline phased loading 漫画详情页支持离线先本地后网络的分阶段加载 May 23, 2026
@FC383

FC383 commented May 23, 2026

Copy link
Copy Markdown
Author

6 个内置漫画源详情页新增离线分阶段加载。

comic_page.dart:BaseComicPage 新增 pageHistory 公开 getter。

6 个页面:各新增 loadLocalData() override,三级 fallback(history → 下载 → 收藏),用 fromJson/fromMap/构造函数构造最小 T 渲染。

  1. HistoryManager(历史记录)→ 离线渲染首选项
  2. DownloadManager(本地下载记录)→ 封面取 file:// 本地路径
  3. LocalFavoritesManager(本地收藏)→ 取 FavoriteItem 的 name/cover

@FC383 FC383 changed the title 漫画详情页支持离线先本地后网络的分阶段加载 从下载记录,收藏夹和已下载页面进入漫画详情页支持离线先本地后网络的分阶段加载 May 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant