# shu **Repository Path**: JackTim/shu ## Basic Information - **Project Name**: shu - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-15 - **Last Updated**: 2026-09-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 枢 · shu 基于 **Flutter 3.44.8 / Dart 3.12.2** 的跨平台个人工具集应用,是原 uni-app (Vue 2) 版本 [ToolsBox](../../HBuilderProjects/ToolsBox) 的完整重写。 > 名称释义:**「枢」**——门轴、中枢。取「万物从它转动」之意:数据存于本地由自己掌握,设备之间互联互通。 > 工程标识符仍为 `tools_box`(pubspec 包名 / Android applicationId / 数据库文件名均未变更),仅显示名改为「枢」。 本地优先,数据全部存于本机 SQLite,可选通过 WebDAV 备份到自有云端。 | 目标平台 | 状态 | |---|---| | Android / iOS | ✅ 主要目标 | | Windows / macOS / Linux | ✅ 桌面端支持(无相机功能降级为手动输入) | | Web | ✅ 通过 sqlite3 WASM 运行 | | 微信小程序 | ❌ Flutter 不支持,已放弃(旧版 uni-app 仍保留) | ## 技术栈 | 层 | 技术 | 说明 | |---|---|---| | 框架 | Flutter 3.44.8 | Dart SDK `^3.12.2` | | 状态管理 | `flutter_riverpod` | 替代原全局 `Vue.prototype` 挂载 | | 路由 | `go_router` | `StatefulShellRoute` 实现双 Tab 独立导航栈 | | 数据库 | `drift` + `drift_flutter` | 类型安全 + 响应式 Stream,替代原 `plus.sqlite` | | 本地存储 | `shared_preferences` | 键名沿用旧版,便于设置迁移 | | 代码生成 | `drift_dev` + `build_runner` | 生成 `*.g.dart` | | 富文本 | `flutter_quill`(规划) | 对应原 Quill Editor | | 扫码 | `mobile_scanner`(规划) | 桌面/Web 降级为手动输入 | | 同步 | `webdav_client`(规划) | 对应原 uniplugin-webdav | ## 功能模块 ### 已完成 - **应用架构** — Riverpod 依赖注入、GoRouter 路由表、亮/暗主题(配色对齐旧版 `theme.json`)、桌面端紧凑主题 - **数据层** — Drift 12 张表 + 对应 DAO,列名与旧版 SQLite 完全一致,便于导入历史数据 - **双 Tab 框架** — 底部导航「械库」(工具九宫格,工具注册表驱动,支持列表/卡片两种样式)+「私阁」(设置与个人区) - **私密模式** — 「私阁」页标题连点 5 次唤出 PIN 框(默认密码 `0000`),未解锁时隐藏 `privateOnly` 入口,并由路由守卫拦截直接访问 - **我的收藏** — 相机扫码 / 粘贴解析 / 手动三种添加方式,瀑布流+列表双视图,分类管理与批量操作,分享二维码 - **笔记** — Markdown 编辑↔预览、fleather 富文本(Delta JSON)、文件夹管理、截止提醒 - **影视库(私密)** — 作品管理、javbus 抓取引擎、女优独立页、13 条默认抓取规则、规则正则测试页 - **AI 对话** — OpenAI 兼容接口(多供应商预设)、SSE 流式输出、多会话持久化、记忆表、模型管理 - **网页浏览 / 元素拾取器** — 应用内 WebView;注入 JS 生成 CSS 选择器,桌面/Web 降级手动填写 - **运行日志** — 拦截 Dart 端与框架级异常写入 SQLite,支持级别筛选/搜索/清空 - **SQL 控制台** — 内置数据库调试查询,SELECT 表格展示 + 写操作确认 - **工具别名** — 自定义首页工具标题,落库 `tool_alias` - **数据同步** — 本地备份/恢复(选表 JSON)+ WebDAV 上传/下载 - **版本升级检查** — 读取当前版本 + 拉取版本 JSON + 语义化比较 + 前往下载 ### 开发中 / 规划 | 模块 | 说明 | 状态 | |---|---|---| | 局域网协作文档 | 手机端起 shelf 服务器,PC/网页直连 IP,WebSocket 实时同步 + 剪贴板互抄 | 🟡 | | 多端通知 | Windows / Android / Linux 系统通知 + 软件级兜底 | 🟡 | | PC 互联 | 对接原 Python `tools-server`(协议 / 数据发送器 / 二维码配对 / 历史页) | 🟡 | | 手机实用工具 | 文本处理集 / 二维码全能扫描 / 密码生成器 / 单位换算 | 🟡 | > 🟢 已完成 🟡 规划中 🔴 暂缓 ## 项目结构 ``` lib/ ├── main.dart # 入口:初始化 SharedPreferences 并注入 ProviderScope ├── app/ # 应用级装配 │ ├── app.dart # MaterialApp.router │ ├── router/ │ │ ├── app_routes.dart # 路由路径常量(唯一来源) │ │ ├── app_router.dart # 路由表 + 双 Tab ShellRoute │ │ └── private_route_guard.dart # 私密路由守卫 │ ├── shell/main_shell.dart # 底部导航外壳 │ └── theme/ │ ├── app_palette.dart # ColorUI 调色板(工具按 colorName 取色) │ ├── app_theme.dart # 亮/暗 ThemeData │ └── theme_controller.dart # ThemeMode 状态与持久化 ├── core/ # 与业务无关的基础设施 │ ├── preferences/ # 偏好键名常量 + Provider │ └── widgets/ # 通用组件 ├── data/ │ ├── database/ │ │ ├── app_database.dart # 仅做组装:声明表与 DAO │ │ ├── tables/ # 一表一文件 + barrel 导出 │ │ ├── daos/ # 一表一 DAO + raw_query_dao(调试专用) │ │ ├── connection/ # 平台差异收敛(移动/桌面走文件,Web 走 WASM) │ │ └── migrations/ # 版本化迁移策略 │ └── providers/ # 数据库与 DAO 的 Riverpod 注入点 └── features/ # 按业务模块划分,每个模块内部再分 domain/application/presentation ├── home/ # 首页九宫格 + 工具注册表 ├── mine/ # 「我的」设置页 ├── private_mode/ # 私密模式(状态/连点触发/PIN 对话框) ├── scan_favorite/ note/ porn_work/ ├── sync/ log/ sql_console/ tool_alias/ ``` ## 快速开始 本机 Flutter 由 **vfox** 管理,可执行文件路径: ``` D:\MyDevelopmentTools\vfox\sdks\flutter\v-3.44.8\flutter-3.44.8\bin\flutter ``` ```bash # 拉取依赖 flutter pub get # 生成 drift 代码(改动表结构或 DAO 后必须执行) dart run build_runner build --delete-conflicting-outputs # 运行 flutter run -d windows # 桌面 flutter run -d chrome # Web flutter run -d # Android / iOS # 质量检查 flutter analyze flutter test ``` ## 数据库 - **引擎**:SQLite(通过 drift;Web 端为 sqlite3 WASM) - **库名**:`toolsDB`(与旧版 `_doc/toolsDB.db` 一致,**刻意不改名**以兼容历史数据) - **结构版本**:见 `migrations/schema_migration.dart` 的 `kSchemaVersion` | 表 | DAO | 说明 | |---|---|---| | `scan_favorite` | `ScanFavoriteDao` | 收藏条目 | | `scan_classification` | `ScanClassificationDao` | 分类(扫码分类 / 笔记文件夹共用) | | `app_logs` | `AppLogDao` | 应用日志 | | `porn_works` | `PornWorkDao` | 影视作品(私密) | | `scrape_rules` | `ScrapeRuleDao` | 抓取规则 | | `notes` | `NoteDao` | 笔记 | | `folders` | `FolderDao` | 笔记文件夹 | | `tool_alias` | `ToolAliasDao` | 首页工具别名 | | `system_prompts` | `SystemPromptDao` | AI 系统提示词 | | `chat_sessions` | `ChatSessionDao` | AI 对话会话 | | `chat_messages` | `ChatMessageDao` | AI 对话消息 | | `chat_memories` | `ChatMemoryDao` | AI 对话记忆 | | `ai_models` | `AiModelDao` | AI 模型配置 | | `raw_query` | `RawQueryDao` | SQL 控制台调试专用(非业务表) | 公共列由 mixin 复用:`BaseColumns`(id / createTime)、`SoftDeleteColumn`(idDelete,**沿用旧版拼写**)、`PrivacyColumn`(isPrivate)。 ## 与旧版的主要差异 | 方面 | uni-app 旧版 | Flutter 新版 | |---|---|---| | 平台 | App / 小程序 / H5 | App / 桌面 / Web(无小程序) | | 数据库访问 | 手写 SQL 字符串 | Drift 类型安全 DSL,编译期校验列名 | | 列表刷新 | 手动调 service 重查 | Drift Stream 自动推送 | | 平台差异 | `#ifdef APP-PLUS` 条件编译 | 依赖注入 + 平台判断收敛在单一文件 | | 建表升级 | `sqliteInit.js` 手工补列 | 版本化 `MigrationStrategy` | | 深色模式 | `plus.nativeUI.setUIStyle()` | `ThemeData` + `ThemeMode` | | 相机扫码 | 仅移动端 | 移动端相机,桌面/Web 手动输入降级 |