别再忍受广告阅读器了,这个 Flutter 开源小说应用有点惊艳

0 阅读5分钟

最近我做了一个开源小项目:novel_reader

GitHub 地址:
github.com/cmdparkour/…

它是一个基于 Flutter 开发的本地小说阅读器,当前主要支持 TXT 导入阅读,已经做了这些能力:

  • 本地 TXT 导入
  • 书架管理
  • 阅读进度自动保存
  • 字号 / 行高 / 主题 / 亮度设置
  • 章节解析
  • 滚动 / 分页双阅读模式
  • TTS 听书

这个项目不是想做成“大而全”的阅读平台,而是想先把一件小事做好:

做一个真正能用、离线优先、适合看本地小说的阅读器。


我为什么会做这个项目?

原因很简单:我想要一个更纯粹一点的阅读体验。 现在很多阅读产品要么功能太重,要么广告太多,要么离不开账号体系、云同步、在线书源。
但很多时候,我的需求其实很朴素:

  • 手里有 TXT 文件
  • 想导进去直接看
  • 能记住进度
  • 字体和背景能自己调
  • 最好再支持翻页和听书 所以我就自己做了一个。 这个项目从一开始的目标就不是“做平台”,而是:
  • 本地优先
  • 离线优先
  • 体验优先

这个项目现在能做什么?

  1. 支持本地 TXT 导入 目前项目聚焦在 TXT 格式。
    打开应用后,可以直接导入本地小说文件,进入书架管理。 我没有把它做成“只记文件路径”的临时读取,而是做了更稳定一点的处理,尽量避免文件丢失或路径失效带来的问题。

  1. 书架管理 + 阅读进度保存 导入后的小说会展示在书架里。
    点击进入阅读页,退出后会自动保存当前阅读位置,下次打开可以继续读。 这个功能看起来普通,但我觉得它是阅读器最基础、也最不能缺的一环。

  1. 阅读设置不是摆设 我不想只做一个“只能调字号”的设置页,所以现在已经支持这些内容:
  • 字体大小
  • 行高
  • 背景颜色
  • 文字颜色
  • 屏幕亮度
  • 主题模式
  • 阅读模式切换 而且设置修改后会即时生效,方便边调边看。

  1. 支持滚动和分页两种阅读模式 有的人喜欢连续滚动,有的人更喜欢一页一页翻。
    所以我把两种模式都做进去了。 这部分实现时我比较在意的是:
    分页不能只是简单切字符串,而是要尽量根据当前排版参数去计算页面内容,不然阅读体验会很奇怪。 所以这个项目里,分页阅读并不是一个“视觉开关”,而是真正参与了内容切分逻辑。

  1. 我专门做了中文章节解析 这应该是我自己比较满意的一部分。 很多 TXT 阅读器的问题是:
    只能把整本书当成一整块文本展示,读长篇小说时体验会很差。 所以我在项目里加了章节解析逻辑,去识别中文小说里常见的结构,比如:
  • 第 X 卷
  • 第 X 章
  • 第 X 节
  • 第 X 回 这样可以生成章节列表,后续也更方便做跳转、进度定位和目录阅读。 对中文网文场景来说,我觉得这一步很值。

  1. 还接了 TTS 除了“看”,我也想让它支持“听”。 所以现在项目里已经集成了 TTS,支持基本的朗读相关功能。
    这部分还在继续打磨,但已经能作为阅读辅助能力使用了。 我自己做这个功能的初衷也很简单:

有时候不是不想看,而是眼睛累了。
这时候能切成听书模式,体验会舒服很多。


这个项目用了什么技术? 当前技术栈比较直接:

  • Flutter
  • Provider
  • SharedPreferences
  • FilePicker
  • ScreenBrightness
  • flutter_tts 项目结构也比较常规: lib/ ├── main.dart ├── models/ ├── providers/ ├── services/ └── pages/ 大致拆分思路是:
  • models:数据模型
  • providers:状态管理
  • services:业务逻辑
  • pages:页面层 我希望它不仅能“跑起来”,也能保持一个相对清晰的结构,后续继续扩展时不至于太乱。

这个项目目前还不完美 虽然已经能用,但它还远远没到“完成版”。 目前比较明确的限制有这些:

  • 现在核心支持还是 TXT
  • 大文件场景还有优化空间
  • 搜索、书签、自定义字体这些能力还没完全补齐
  • 更完整的翻页动画、更多格式支持也还在规划里 所以如果一定要给它一个定位,我觉得更准确的说法是:

这是一个已经具备产品雏形、但还在持续打磨中的开源阅读器项目。


我为什么选择把它开源?

一方面是因为我自己确实想做这个东西。
另一方面,我也觉得这种项目挺适合开源:

  • 方向具体
  • 场景明确
  • 容易持续迭代
  • 对 Flutter 学习者也有参考价值 如果有人刚好也想做:
  • 本地工具
  • 阅读器
  • 中文文本处理
  • Flutter 中小型应用 那这个项目也许能提供一点参考。

接下来还想继续做什么? 后面我想继续完善这些方向:

  • 更多文件格式支持
  • 更完整的书签 / 搜索能力
  • 更好的大文本性能处理
  • 更自然的翻页体验
  • 更丰富的主题和字体配置 如果时间够,也会考虑继续往“更完整的本地阅读体验”方向推。

但整体上,我还是会尽量克制,不想把它做成一个越来越重的东西。


最后 这个项目的出发点其实很简单:

给喜欢本地阅读的人,一个更安静、更可控的选择。 如果你也对这个方向感兴趣,欢迎看看项目,也欢迎提 Issue/PR。

GitHub:github.com/cmdparkour/…

如果你觉得这个项目还不错,也欢迎顺手点个 Star。
如果你自己也做过类似的本地工具项目,也欢迎评论区交流。