logo
0
0
WeChat Login

可记

一个综合性的生活管理应用,帮助用户高效管理日常事务。

功能特性

📅 计划管理

  • 待办事项: 管理日常任务,支持优先级、分类、截止日期和提醒
  • 纪念日: 记录重要日期,支持农历和每年重复
  • 倒计时: 设定目标日期,实时显示剩余天数
  • 打卡: 养成良好习惯,支持多种频率
  • 出行计划: 规划旅行行程,管理行程细节和预算

💰 资产管理

  • 账户记账: 管理多个账户,记录收支
  • 物品管理: 记录物品信息和价值
  • 位置管理: 追踪物品存放位置

📝 随记

  • 随记: 记录生活点滴,支持富文本和图片
  • 心情: 记录每日心情状态
  • 地点记录: 记录去过的地方
  • 排班管理: 管理工作排班

🔐 密码管理

  • 安全存储: 加密存储所有密码
  • 生物识别: 支持指纹/面容解锁
  • 快速复制: 一键复制用户名和密码
  • 自动填充: 支持密码自动填充功能
  • 2FA 验证: 支持两步验证码(TOTP),兼容 Google Authenticator
  • 一键导入: 支持从 Google Authenticator 扫码导入 2FA 账户
  • 卡包管理: 银行卡、证件安全存储,支持水印功能
  • 证件提醒: 证件到期自动提醒

⚙️ 个人中心

  • 数据统计: 查看使用统计和数据概览
  • 主题设置: 支持浅色/深色主题
  • 数据备份: 备份和恢复数据
  • 隐私保护: 完善的隐私政策和数据保护

应用架构与业务流程

1. 应用整体架构

2. 应用启动流程

3. 用户操作主流程

4. 计划模块业务流程

5. 资产管理业务流程

6. 密码管理安全流程

7. 数据流转架构

8. 技术架构层次

9. 模块依赖关系


技术栈

核心框架

  • Flutter 3.0+
  • Dart 3.0+

状态管理

  • flutter_bloc - BLoC状态管理模式

数据存储

  • isar - 高性能本地 NoSQL 数据库
  • isar_flutter_libs - Isar Flutter 集成
  • shared_preferences - 简单键值存储

加密安全

  • encrypt - 数据加密
  • crypto - 加密算法
  • local_auth - 生物识别

UI组件

  • flutter_slidable - 滑动操作
  • flutter_staggered_grid_view - 瀑布流布局
  • fl_chart - 图表展示
  • table_calendar - 日历组件
  • flutter_screenutil - 屏幕适配

工具库

  • intl - 国际化日期格式化
  • uuid - 唯一标识符生成
  • path_provider - 文件路径管理
  • permission_handler - 权限管理
  • flutter_local_notifications - 本地通知
  • lunar - 中国农历

项目结构

lib/ ├── core/ # 核心模块 │ ├── bloc/ # BLoC基类和观察者 │ ├── constants/ # 常量定义 │ ├── providers/ # 全局提供者(主题) │ ├── services/ # 服务层(Isar、高德地图、应用初始化) │ ├── theme/ # 主题配置 │ ├── utils/ # 工具类 │ └── widgets/ # 通用组件 ├── features/ # 功能模块 │ ├── home/ # 首页(底部导航外壳) │ ├── plan/ # 计划管理 │ │ ├── data/models/ # Isar 模型 │ │ └── presentation/ │ │ ├── bloc/ # 状态管理 │ │ ├── pages/ # 页面 │ │ └── widgets/ # 功能组件 │ ├── daily/ # 随记 │ │ ├── data/models/ │ │ └── presentation/ │ ├── asset/ # 资产管理 │ │ ├── data/models/ │ │ └── presentation/ │ ├── password/ # 密码管理 │ │ ├── data/models/ │ │ └── presentation/ │ └── profile/ # 个人中心 │ ├── data/models/ │ └── presentation/ └── main.dart # 应用入口

安装和运行

前置要求

  • Flutter SDK 3.0+
  • Dart SDK 3.0+

安装步骤

  1. 克隆项目
git clone <repository-url> cd keji_app
  1. 安装依赖
flutter pub get
  1. 生成 Isar 适配器
dart run build_runner build --delete-conflicting-outputs
  1. 运行应用
flutter run

快速运行脚本

项目提供了统一的构建脚本:

# 查看帮助信息 ./scripts/build-apk.sh --help # 构建 release APK ./scripts/build-apk.sh --release # 构建 debug APK ./scripts/build-apk.sh --debug # 生成签名密钥 ./scripts/build-apk.sh --generate-keystore # 验证 APK 签名 ./scripts/build-apk.sh --verify-signing # 检查签名配置状态 ./scripts/build-apk.sh --status # 安装依赖并运行应用 ./scripts/run.sh

应用签名配置

⚠️ 重要:发布应用前必须配置签名。

快速配置步骤

  1. 生成签名密钥

    ./scripts/generate-keystore.sh
  2. 构建签名 APK

    ./scripts/build-apk.sh --release
  3. 验证签名

    ./scripts/build-apk.sh --verify-signing
  4. 导出签名文件为 Base64(用于 CI/CD)

    ./scripts/generate-keystore.sh --export

脚本使用说明

APK 构建

# 构建 release 版本 ./scripts/build-apk.sh --release # 构建 debug 版本 ./scripts/build-apk.sh --debug # 验证 APK 签名 ./scripts/build-apk.sh --verify-signing # 检查签名配置状态 ./scripts/build-apk.sh --status

签名密钥管理

# 生成签名密钥 ./scripts/generate-keystore.sh # 检查签名配置状态 ./scripts/generate-keystore.sh --status # 导出 Base64(用于 CI/CD) ./scripts/generate-keystore.sh --export

环境变量

用于签名密钥的生成和构建:

环境变量说明
KEYSTORE_PASSWORD密钥库密码
KEY_PASSWORD密钥密码(可选)
KEY_ALIAS密钥别名
CNB_BRANCH版本号/分支名

应用初始化

应用启动时会自动初始化必要的资源:

  • Isar 数据库
  • 应用数据目录
  • 图片存储目录
  • 备份文件目录

首次开发时,需要确保资源文件存在:

# 开发环境初始化(创建缺失的资源文件) dart run scripts/setup.dart

云端开发环境运行到本地模拟器

在云端开发环境(如 CNB)开发时,可以通过 FRP 端口转发将 Flutter 应用运行到本地的安卓模拟器。

方案一:模拟器已暴露公网端口

如果模拟器已经通过公网暴露(如 <IP>:16384),直接连接即可:

# 连接远程模拟器 adb connect <IP>:16384 # 确认连接 adb devices # 运行 Flutter 应用 flutter run -d <IP>:16384

方案二:通过 FRP 转发本地模拟器

如果模拟器在本地,需要通过 FRP 转发到云端:

1. 确认本地模拟器 ADB 端口

以 MuMu 模拟器为例,默认端口为 16384:

# 连接 MuMu 模拟器确认端口可用 adb connect 127.0.0.1:16384 # 确认连接成功 adb devices

2. 配置 FRP

本地 frpc.toml:

serverAddr = "你的FRP服务器地址" serverPort = 7000 [[proxies]] name = "adb" type = "tcp" localIP = "127.0.0.1" localPort = 16384 remotePort = 16384

启动本地 frpc:

./frpc -c frpc.toml

3. 云端连接本地模拟器

在云开发环境中:

# 通过 FRP 连接到本地模拟器 adb connect 127.0.0.1:16384 # 确认设备已连接 adb devices # 运行 Flutter 应用 flutter run

MuMu 模拟器端口参考

模拟器版本默认 ADB 端口
MuMu 模拟器 1216384(多开实例依次递增)
MuMu 模拟器 Pro (Mac)16384
MuMu 模拟器 6/77555

注意事项

  • 网络延迟可能导致热重载较慢
  • ADB 连接断开后需要重新执行 adb connect
  • 确保防火墙允许相关端口通信

数据安全

所有敏感数据都经过 AES-256 加密存储:

  • 密码使用主密码派生的密钥加密
  • 支持生物识别快速解锁
  • 数据存储在本地设备上,云同步为可选功能

隐私与安全

开发规范

BLoC 模式

  • 每个功能模块包含独立的 Bloc
  • Event、State 分离定义
  • 状态类使用不可变对象

Isar 模型

  • 使用 @collection 注解定义模型
  • 每个模型有两个 ID:
    • Id id - Isar 内部使用的自动增量 ID(int)
    • String xxxId - 业务使用的字符串 ID
  • 修改模型后需运行 dart run build_runner build

代码风格

  • 遵循 Flutter 官方代码规范
  • 使用有意义的命名
  • 注释重要业务逻辑

代码生成

修改 Isar 模型后,需要重新生成适配器:

# 一次性生成 dart run build_runner build --delete-conflicting-outputs # 监听模式(开发时推荐) dart run build_runner watch --delete-conflicting-outputs

常用命令

# 运行静态分析 flutter analyze # 运行测试 flutter test # 格式化代码 dart format lib/ # 清理构建缓存 flutter clean # 升级依赖 flutter pub upgrade

待实现功能

  • 数据云同步
  • 密码导入/导出
  • 统计图表展示
  • 多语言支持
  • 深色模式主题优化

最近更新

v1.2.0

  • 2FA 功能增强: 支持 Google Authenticator 导入,批量添加 2FA 账户
  • 移除冗余页面: 合并"验证"功能到 2FA,简化界面
  • 统一消息提示: 全局使用 ModernToast 统一样式
  • 文件日志服务: 安全的日志记录,自动过滤敏感信息
  • Bug 修复: 精确闹钟权限、时区初始化、水印预览等问题修复

贡献指南

欢迎提交 Issue 和 Pull Request!

许可证

MIT License

作者

拾叶

About

《可记》APP仓库

5.15 MiB
0 forks0 stars3 branches16 TagREADMEMIT license
KeJirepo-named
Language
Dart94%
JavaScript2.9%
Shell1.9%
Kotlin1.2%