Skip to content

Fix bug254#261

Open
FC383 wants to merge 3 commits into
Pacalini:masterfrom
FC383:fix-Bug254
Open

Fix bug254#261
FC383 wants to merge 3 commits into
Pacalini:masterfrom
FC383:fix-Bug254

Conversation

@FC383

@FC383 FC383 commented May 7, 2026

Copy link
Copy Markdown

fix #254

fix: 修复已下载漫画1300+时因单条损坏记录导致页面白屏崩溃

PR Description:

问题

已下载漫画数量达到 1300+ 后打开已下载页面白屏崩溃。根本原因是下载数据库中某条记录的 JSON 数据损坏,而 getAll 方法零容错。

根因

  1. getAll 使用 result.map(...).toList() 并对 _getComicFromJson 返回值使用空断言 !
  2. 当某条记录的 JSON 损坏(非合法 Map<String, dynamic>)时,_getComicFromJson 返回 null
  3. ! 触发 Null check operator used on a null value 异常,整个页面崩溃——其余正常记录全部不可访问

修改

lib/network/download.dart

  • _getComicFromJson 中添加 decoded is! Map<String, dynamic> 类型守卫
  • getAllmap(...).toList() 改为 for 循环 + try-catch
  • 抽取 _safeDelete 辅助方法,安全删除损坏记录且自身不崩
  • 损坏记录自动从 DB 清理(磁盘文件夹可能残留为孤儿目录)

##遗留bug
只删除了db中的数据,残留的孤儿磁盘文件和文件夹没有删除

FC383 and others added 3 commits May 7, 2026 21:37
修复 fix Pacalini#254 的遗留问题:getAll 检测到 JSON 损坏记录后仅调用
_safeDelete 删除 DB 行,磁盘上的漫画目录(含 cover.jpg 及图片文件)
成为孤儿文件永久残留。

新增 _tryCleanDisk 辅助方法,在 _safeDelete 前清理对应磁盘目录。
磁盘清理失败不影响 DB 删除,目录不存在时跳过。
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.

[Bug]: 下载了太多漫画后无法查看了

1 participant