You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于CosmosEpub仅恢复阅读章节无法恢复具体页码的技术问询

解决CosmosEpub恢复阅读进度时仅恢复章节、无法恢复章节内页码的问题

问题分析

你当前的代码逻辑是先读取进度、设置章节和页码,再打开书籍,但CosmosEpub 0.0.2版本的openLocalBook方法仅接收starterChapter参数,没有直接传入起始页码的入口;同时提前调用setCurrentPageIndex可能无法被后续打开书籍的操作识别,导致页码被重置为章节第1页。

可行解决方案

1. 调整设置页码的时机(书籍打开后再设置)

将设置页码的操作移到书籍打开完成的回调中(如果CosmosEpub支持onBookOpened这类回调),确保书籍初始化完成后再恢复页码:

Future<void> _openEpubReader() async {
  try {
    print('Fetching book progress...');
    BookProgressModel? bookProgress = await CosmosEpub.getBookProgress(widget.bookTitle);

    int startChapterIndex = bookProgress?.currentChapterIndex ?? 0;
    int startPageIndex = bookProgress?.currentPageIndex ?? 0;

    print('Opening local EPUB book...');
    await CosmosEpub.openLocalBook(
      localPath: widget.filePath,
      context: context,
      bookId: widget.bookTitle,
      starterChapter: startChapterIndex,
      onBookOpened: () async {
        // 书籍加载完成后再设置页码
        await CosmosEpub.setCurrentPageIndex(widget.bookTitle, startPageIndex);
        // 如果SDK提供翻页到指定页码的方法,直接调用更可靠
        // await CosmosEpub.flipToPage(startPageIndex);
      },
      onPageFlip: (int currentPage, int totalPages) {
        CosmosEpub.setCurrentPageIndex(widget.bookTitle, currentPage);
      },
    );
  } catch (e) {
    print('Error opening EPUB: $e');
  }
}

2. 验证页码存储的准确性

确认onPageFlip回调中的currentPage是章节内的相对页码,而非全书的绝对页码:

  • 如果currentPage是全书总页码,需要先转换为当前章节内的相对页码再存储,否则恢复时会对应错误位置。
  • 可以打印bookProgress?.currentPageIndex的值,确认存储的页码和实际阅读的章节内页码一致。

3. 升级CosmosEpub版本

0.0.2属于早期版本,可能存在进度恢复的bug。尝试升级到最新版本,查看官方更新日志是否修复了章节内页码恢复的问题。

4. 手动触发翻页(如果SDK支持)

如果上述方法无效,且SDK提供了手动翻页的API(比如flipPage或jumpToPage),可以在书籍打开后循环调用翻页方法,直到到达目标页码:

onBookOpened: () async {
  // 从第1页开始翻到目标页码
  for (int i = 1; i < startPageIndex; i++) {
    await CosmosEpub.flipPage();
  }
},

内容的提问来源于stack exchange,提问作者Samuel Aberra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:16:12