# reminder
**Repository Path**: mailboxzhang2005/reminder
## Basic Information
- **Project Name**: reminder
- **Description**: 烧饭时钟提醒APP
- **Primary Language**: Dart
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-26
- **Last Updated**: 2026-01-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 关火了吗 APP
> 一款帮助用户避免烧饭时忘记关火的安全提醒应用
## 项目简介
**关火了吗**是一款专为日常烹饪场景设计的定时提醒应用。在做饭过程中,用户经常会因为忙于其他事情而忘记关火,导致饭菜烧糊,甚至可能引发火灾。本应用通过简单易用的定时提醒功能,帮助用户在烹饪时设置提醒,到时间后及时通知用户关火,有效避免安全事故。
## 应用截图
主页界面 快速设置定时器,查看等级和金币 |
设置时间 直观的时间选择界面 |
倒计时 实时倒计时显示和控制 |
设置页面 个性化设置和功能配置 |
> 更多详细介绍请查看 [软件介绍文档](intro/软件介绍.md)
## 核心特性
### 基础功能
- **烧饭定时提醒** - 快速设置定时器(5/10/15/30分钟或自定义时间),到时间后通知提醒关火
- **多种显示模式** - 支持前台服务通知、悬浮窗小球、应用内显示三种模式
- **自定义提醒声音** - 提供多种提醒铃声选择,支持音频预览和自定义音频
- **实时倒计时** - 通知栏实时显示剩余时间,悬浮窗带进度环显示
### 高级功能
- **等级系统** - 根据使用次数提升等级,从"新手厨师"到"厨神"(10个等级)
- **安全等级** - 基于成功关火次数评定安全星级(1-5星)
- **统计数据** - 详细记录使用次数、总时长、成功率等数据
- **主题商店** - 使用虚拟货币购买不同主题皮肤(8种主题)
- **背景商店** - 购买和切换应用背景图片(多种背景可选)
- **虚拟货币系统** - 通过每日签到、升级奖励等方式赚取金币
- **老人模式** - 提供大字体、大按钮、大图标的适老化界面
## 技术栈
- **框架**: Flutter 3.10.7
- **语言**: Dart SDK >= 3.10.7
- **状态管理**: Provider 6.1.1
- **本地存储**: SharedPreferences 2.2.2
- **通知系统**: flutter_local_notifications 17.0.0
- **音频播放**: audioplayers 5.2.1
- **路由管理**: go_router 13.0.0
- **权限管理**: permission_handler 11.1.0
- **UI组件**: flutter_slidable 3.0.1
- **图标库**: font_awesome_flutter 10.6.0, cupertino_icons 1.0.8
- **国际化**: intl 0.19.0
## 项目架构
### 目录结构
```
lib/
├── main.dart # 应用入口
├── models/ # 数据模型
│ ├── timer_model.dart # 定时器模型
│ ├── user_stats_model.dart # 用户统计模型
│ ├── sound_model.dart # 声音模型
│ ├── theme_model.dart # 主题模型
│ └── background_model.dart # 背景模型
├── providers/ # 状态管理
│ ├── timer_provider.dart # 定时器状态
│ ├── user_stats_provider.dart # 用户统计状态
│ ├── theme_provider.dart # 主题状态
│ ├── background_provider.dart # 背景状态
│ ├── elderly_mode_provider.dart # 老人模式状态
│ └── purchase_provider.dart # 购买系统状态
├── services/ # 业务服务
│ ├── timer_service.dart # 定时器服务
│ ├── notification_service.dart # 通知服务
│ ├── audio_service.dart # 音频服务
│ └── storage_service.dart # 存储服务
├── screens/ # 页面
│ ├── home_screen.dart # 主页
│ ├── stats_screen.dart # 统计页面
│ ├── settings_screen.dart # 设置页面
│ ├── theme_store_screen.dart # 主题商店
│ ├── background_store_screen.dart # 背景商店
│ └── about_screen.dart # 关于页面
├── widgets/ # 自定义组件
│ ├── circular_timer.dart # 圆形定时器
│ ├── stats_card.dart # 统计卡片
│ ├── level_badge.dart # 等级徽章
│ └── time_picker_dialog.dart # 时间选择器
└── utils/ # 工具类
├── level_calculator.dart # 等级计算
└── time_formatter.dart # 时间格式化
```
### 核心服务
#### TimerService
- 定时器核心逻辑
- 倒计时管理
- 定时器状态控制
#### NotificationService
- 前台服务通知
- 实时倒计时显示
- 通知权限管理
#### AudioService
- 提醒音频播放
- 音频预览功能
- 自定义铃声支持
#### StorageService
- 本地数据持久化
- 用户设置存储
- 统计数据管理
## 快速开始
### 环境要求
- Flutter SDK >= 3.10.7
- Dart SDK >= 3.10.7
- Android Studio / Xcode(用于移动端开发)
- Git
### 安装依赖
```bash
flutter pub get
```
### 运行应用
```bash
# 开发模式运行
flutter run
# 指定设备运行
flutter run -d
# 查看可用设备
flutter devices
```
### 构建应用
#### 方法一:使用自动化脚本(推荐)
**Windows:**
```bash
cd scripts
build_release.bat 1.0.0+1
```
**Linux/Mac:**
```bash
cd scripts
chmod +x build_release.sh
./build_release.sh 1.0.0+1
```
自动化脚本会完成以下操作:
1. 清理旧构建
2. 获取依赖
3. 运行代码检查
4. 构建发布版 APK
5. 创建发布目录 `release/v1.0.0/`
6. 重命名 APK 为 `关火了吗-v1.0.0-1.apk`
7. 生成构建信息文件
8. 复制发行说明文档
#### 方法二:手动构建
```bash
# Android APK
flutter build apk --release
# Android App Bundle
flutter build appbundle --release
# iOS(仅支持 macOS)
flutter build ios --release
```
#### 方法三:指定版本号构建
```bash
# 不修改 pubspec.yaml,直接指定版本号
flutter build apk --release --build-name=1.0.0 --build-number=1
```
详细的版本管理和发布流程请查看 [VERSION_GUIDE.md](VERSION_GUIDE.md)
**注意**: iOS 应用只能在 macOS 上构建,因为需要 Xcode 和 Apple 的编译工具链。
#### 在 Windows 上构建 iOS 版本
如果你使用 Windows 开发,可以通过 GitHub Actions 自动构建 iOS 版本:
**方式一:手动触发构建**
1. 将代码推送到 GitHub 仓库
2. 访问仓库的 Actions 页面
3. 选择 "iOS Build" 工作流
4. 点击 "Run workflow" 按钮手动触发构建
5. 构建完成后,在 Artifacts 中下载构建产物
**方式二:通过 Tag 自动触发**
```bash
# 创建并推送版本标签
git tag v1.0.0
git push origin v1.0.0
```
推送 tag 后,GitHub Actions 会自动开始构建 iOS 版本。
**查看构建结果**
- 访问仓库的 Actions 页面查看构建状态
- 构建成功后,在 Artifacts 中下载 `ios-build-xxx` 文件
- 构建产物保留 30 天
**配置代码签名(可选)**
如果需要构建可安装的 IPA 文件,需要配置 Apple 开发者证书:
1. 在仓库的 Settings > Secrets and variables > Actions 中添加以下 secrets:
- `APPLE_CERTIFICATE_BASE64`: Apple 开发者证书(Base64 编码)
- `APPLE_CERTIFICATE_PASSWORD`: 证书密码
- `APPLE_PROVISIONING_PROFILE_BASE64`: Provisioning Profile(Base64 编码)
2. 取消 [.github/workflows/ios-build.yml](.github/workflows/ios-build.yml) 中签名相关步骤的注释
详细配置说明请参考 GitHub Actions 工作流文件:[.github/workflows/ios-build.yml](.github/workflows/ios-build.yml)
## 主要功能说明
### 定时器功能
- **快速设置**: 提供 5/10/15/30 分钟快捷按钮
- **自定义时间**: 支持自定义分钟数设置
- **多种显示模式**:
- 前台服务通知:通知栏实时显示倒计时
- 悬浮窗小球:可拖动的圆形悬浮窗
- 应用内显示:在应用内查看倒计时
### 用户成长系统
- **等级系统**: 10 个等级,从"新手厨师"到"厨神"
- **经验值**: 每次使用定时器获得经验
- **升级奖励**: 升级时获得虚拟货币奖励
- **安全星级**: 根据成功关火次数评定 1-5 星
### 虚拟货币与商店
- **金币获取**:
- 每日签到奖励
- 等级提升奖励
- 完成定时任务奖励
- **主题商店**: 8 种精美主题可供购买
- **背景商店**: 多种背景图片可供选择
### 辅助功能
- **老人模式**:
- 字体放大 1.3 倍
- 按钮高度增加至 60dp
- 图标尺寸增加至 32dp
- 更易于老年人使用
## 开发指南
### 代码规范
- 遵循 Flutter 官方代码规范
- 使用 `flutter_lints` 进行代码检查
- 所有 Provider 必须继承 `ChangeNotifier`
- 服务类使用单例模式或依赖注入
### 测试
```bash
# 运行单元测试
flutter test
# 运行集成测试
flutter test integration_test
# 代码覆盖率
flutter test --coverage
```
### 调试技巧
- 使用 Flutter DevTools 进行性能分析
- 通过 `flutter logs` 查看实时日志
- 使用 `debugPrint` 输出调试信息
## 版本管理
### 当前版本
- **版本号**: 1.0.0+1
- **应用名称**: 关火了吗
- **包名**: com.flameguard.reminder
### 版本号配置
版本号在 [pubspec.yaml](pubspec.yaml) 中配置:
```yaml
version: 1.0.0+1
```
格式说明:
- `1.0.0` - 版本名称(versionName),用户可见
- `1` - 构建号(versionCode),内部使用,每次发布必须递增
### 版本号规则
遵循 [语义化版本](https://semver.org/lang/zh-CN/) 规范:
- **主版本号(Major)**: 不兼容的 API 修改
- **次版本号(Minor)**: 向下兼容的功能性新增
- **修订号(Patch)**: 向下兼容的问题修正
示例:
- `1.0.0+1` - 首次发布
- `1.0.1+2` - Bug 修复
- `1.1.0+3` - 新功能
- `2.0.0+4` - 重大更新
详细说明请查看 [VERSION_GUIDE.md](VERSION_GUIDE.md)
## 文档
- [VERSION_GUIDE.md](VERSION_GUIDE.md) - 版本管理和发布指南
- [CHANGELOG.md](CHANGELOG.md) - 更新日志
- [RELEASE_NOTES.md](RELEASE_NOTES.md) - 发行说明
- [软件介绍](intro/软件介绍.md) - 详细的应用介绍
## 版本历史
### v1.0.0 (当前版本)
**核心功能**
- ✅ 基础定时提醒功能
- ✅ 多种显示模式(通知栏、悬浮窗、应用内)
- ✅ 自定义提醒声音
- ✅ 用户统计和等级系统
- ✅ 主题商店和虚拟货币系统
- ✅ 背景商店
- ✅ 老人模式(适老化设计)
- ✅ 每日签到系统
**技术特性**
- Provider 状态管理
- 本地数据持久化
- 前台服务通知
- 音频播放系统
- 权限管理
## 常见问题
### 通知不显示?
1. 检查应用通知权限是否开启
2. 确认系统勿扰模式未开启
3. 检查应用是否被系统省电策略限制
### 悬浮窗无法显示?
1. 检查悬浮窗权限是否授予
2. 部分手机需要在设置中手动开启悬浮窗权限
3. 重启应用后重试
### 音频无法播放?
1. 检查音频文件是否存在于 `assets/sounds/` 目录
2. 确认 `pubspec.yaml` 中已正确配置 assets
3. 重新运行 `flutter pub get`
## 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
## 许可证
本项目仅供学习和个人使用。
## 联系方式
如有问题或建议,欢迎通过以下方式联系:
- 提交 Issue
- 发送邮件至项目维护者
---
**关火了吗** - 让烹饪更安全,让生活更安心 🔥