# srt_reader
**Repository Path**: pish7/srt_reader
## Basic Information
- **Project Name**: srt_reader
- **Description**: 字幕学习App
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-14
- **Last Updated**: 2026-03-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# srt_reader
SRT 字幕文件阅读、注释、学习。
## 依赖安装
```sh
flutter pub add get flutter_hooks freezed_annotation json_annotation shared_preferences toastification file_picker path path_provider sqflite flutter_markdown dev:flutter_lints dev:freezed dev:json_serializable dev:build_runner dev:flutter_gen_runner dev:custom_lint
```
## 常用命令
```sh
flutter clean # 清理缓存
rm -rf .dart_tool pubspec.lock
flutter pub get # 重新获取依赖
flutter pub upgrade --major-versions # 跨大版本升级
dart run build_runner build --delete-conflicting-outputs # 生成文件
flutter create --platforms macos . # 添加 macos 支持
```
## macos 网络访问失败
使用 macos 平台访问网络时,需要在 `macos/Runner/DebugProfile.entitlements` 和 `macos/Runner/Release.entitlements` 中添加以下权限:
```
com.apple.security.network.client
```
## 需求文档
SRT 字幕学习助手 - 需求文档
1. 产品概述
一个帮助用户通过电影字幕学习外语的 Flutter 应用,支持 macOS 和 Android 平台。用户可以导入 SRT 字幕文件,在阅读过程中遇到不懂的台词时,向 AI 提问获取解释,并支持缓存和追问功能。
2. 功能需求
2.1 文件管理
- 导入 SRT 文件
- 支持从文件系统选择 SRT 文件
- 自动解析文件名和内容
- 支持导入多个文件
- 文件列表展示
- 显示文件名
- 提供删除文件功能
- 文件存储
- 记录文件路径、文件名、哈希值
2.2 SRT 解析
- 解析 SRT 格式
- 支持标准 SRT 格式
- 解析序号、时间轴、字幕内容
- 处理空行和特殊字符
2.3 字幕阅读
- 台词列表展示
- 显示时间戳
- 显示字幕内容
- 支持滚动浏览
- 台词交互
- 点击台词卡片弹出解释窗口
- 已提问的台词显示标记(如星标)
- 支持快速定位
2.4 AI 问答
- 台词提问
- 点击台词后可向 AI 提问
- AI 能看到前后几句台词的上下文(默认前后各 3 句)
- 支持自定义上下文范围
- 解释模式
- 翻译
- 语法分析
- 文化背景解释
- 用户自定义提问
2.5 缓存系统
- 缓存存储
- 使用 SQLite 存储缓存数据
- 每个台词的唯一标识:文件哈希 + 台词序号
- 存储内容:AI 回复、用户编辑、追问历史
- 缓存读取
- 点击台词时优先读取缓存
- 缓存存在则直接显示
- 用户编辑
- 可编辑 AI 的回复内容
- 编辑后自动保存
- 追问功能
- 支持对同一条台词继续提问
- 保持对话历史上下文
- 追问结果追加到历史记录
- 缓存管理
- 支持清除单个文件缓存
- 支持清除所有缓存
2.6 设置
- API 配置
- 配置 AI API Key
- 配置 API 端点
- 配置模型名称
- 缓存管理
- 查看缓存大小
- 清除缓存按钮
1. 界面设计
3.1 文件管理主页
- 顶部
- 应用标题
- 搜索框
- "+" 导入新文件按钮
- 中部
- 文件卡片列表
- 每个卡片显示:
- 文件名
- 删除按钮
- 底部
- 设置按钮
3.2 字幕阅读页
- 顶部栏
- 左侧:返回按钮(回到文件列表)
- 中间:当前文件名
- 右侧:当前阅读进度
- 主体
- 台词列表(可滚动)
- 每个台词卡片:
- 时间戳(如:00:01:23,456 --> 00:01:26,789)
- 字幕内容
- 已提问标记(右上角星标)
- 点击整个卡片触发解释弹窗
- 底部栏
- 搜索台词功能(可选)
3.3 解释弹窗
- 上部
- 完整台词内容
- 时间戳
- 前后台词上下文(可折叠)
- 中部
- AI 解释区域(可编辑的文本框)
- 如果有追问历史,显示对话历史(可展开/折叠)
- 底部操作栏
- "编辑笔记"按钮(切换编辑模式)
- "继续追问"按钮(弹出输入框)
- "保存"按钮(保存编辑内容)
- "关闭"按钮
3.4 设置页
- API 配置区域
- API Key 输入框
- API 端点输入框
- 模型名称输入框
- 测试连接按钮
- 缓存管理区域
- 显示缓存文件大小
- 清除缓存按钮
- 返回按钮
1. 技术栈
4.1 核心
- Flutter (支持 macOS 和 Android)
- 优先使用 get 和 flutter_hooks 实现功能
4.2 依赖包
- 文件处理: file_picker
- 数据存储: shared_preferences, sqflite, path_provider
- 网络请求: get
- 状态管理: get + flutter_hooks
1. 非功能需求
5.1 性能
- 台词列表滚动流畅(60fps)
5.2 用户体验
- 界面简洁清晰
- 操作流程简单直观
- 支持深色模式(可选)
5.3 数据安全
- API Key 本地存储,不上传
- 缓存数据本地存储,不上传
- 支持清除敏感数据
## 开发计划
第 1 步:基础文件管理(MVP 核心)
- 导入 SRT 文件
- 文件列表展示
- 基础 SRT 解析
- 打开文件进入阅读页面
- 显示台词列表(时间戳 + 内容)
可测试:能否导入多个文件,能否切换文件,能否正确解析 SRT
第 2 步:基础 UI 交互
- 台词卡片点击交互
- 解释弹窗(仅显示内容,暂时没有 AI)
- 返回按钮导航
可测试:界面交互是否流畅,能否正常打开/关闭弹窗
第 3 步:AI 问答集成
- API Key 配置
- 调用 AI API
- 点击台词获取解释
- 显示 AI 回复
可测试:能否正确调用 AI,能否显示回复
第 4 步:缓存系统
- 本地 SQLite 存储
- 缓存读取和保存
- 已提问台词标记
可测试:关闭 APP 再打开,缓存的解释是否还在
第 5 步:编辑和追问
- 用户编辑功能
- 追问功能(保持上下文)
- 保存编辑内容
可测试:能否修改解释,能否继续追问
第 6 步:完善细节
- 错误处理
- 优化性能
- 缓存管理设置页面