# eatWhat **Repository Path**: qobn/eat-what ## Basic Information - **Project Name**: eatWhat - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-14 - **Last Updated**: 2026-02-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 食决 EatDecider(Flutter 本地版) 一个面向“吃饭选择困难症”的本地决策 App。 ## 已实现(MVP) - 4 Tab:`吃啥` / `店铺` / `菜单` / `我的` - 店铺管理:新增、编辑、删除、搜索、标签与场景筛选、封面图(拍照/相册) - 菜品管理:新增、编辑、删除、按店分组展示、喜爱星标、菜图(拍照/相册) - 随机决策:仅选店 / 选店+选菜、预算过滤、场景过滤、喜爱菜品加权、今日不吃黑名单 - 历史记录:保留最近 5 次决策 - 本地存储:`sqflite`(结构化数据)+ `shared_preferences`(偏好设置) - 数据备份:导出 JSON、按路径导入 JSON ## 技术栈 - Flutter 3 / Dart 3 - `sqflite` + `path_provider` - `shared_preferences` - `image_picker` - `provider` ## 目录结构 - `lib/models.dart`:数据模型 - `lib/data/`:数据库与仓储层 - `lib/state/app_state.dart`:应用状态与业务编排 - `lib/services/decision_engine.dart`:随机决策核心逻辑 - `lib/pages/`:四大页面与表单页 ## 启动 ```bash flutter pub get flutter run ``` ## 测试 ```bash flutter analyze flutter test ``` ## 打包命令(备忘) ### 方式 A:统一脚本(自动重命名,推荐) ```bash # Android 测试包(本地安装,自动重命名) ./scripts/package_android.sh debug # Android 正式 AAB(上架推荐,自动重命名) ./scripts/package_android.sh release-aab # Android 正式 APK(部分渠道需要,自动重命名) ./scripts/package_android.sh release-apk # 一次性打全部(debug apk + release apk + release aab) ./scripts/package_android.sh all ``` 重命名规则: - 输出目录:`build/releases/` - 文件名格式:`eatwhat_v+__.ext` - 示例:`eatwhat_v1.0.0+1_20260213_141500_apk_release.apk` - `type` 取值: - `apk_debug` - `apk_release` - `aab_release` ### 方式 B:Flutter 原生命令(保留) ```bash # Android 测试包 flutter build apk --debug # Android 正式 APK flutter build apk --release # Android 正式 AAB(上架推荐) flutter build appbundle --release # iOS / iPad 正式 IPA(iPhone 和 iPad 共用 iOS 包) flutter build ipa --release # iOS / iPad 调试运行(真机) flutter run ``` 原生输出目录: - Android APK:`build/app/outputs/flutter-apk/` - Android AAB:`build/app/outputs/bundle/release/` - iOS IPA:`build/ios/ipa/` ## 版本号管理(备忘) 版本统一在 `pubspec.yaml` 里维护: ```yaml version: 1.0.0+1 ``` 规则说明: - `1.0.0`:展示版本(Android `versionName` / iOS `CFBundleShortVersionString`) - `+1`:构建号(Android `versionCode` / iOS `CFBundleVersion`) - 每次正式发包,构建号必须递增 示例: - 新功能发布:`1.1.0+2` - 修复发布:`1.0.1+2` 临时覆盖打包版本(不改文件): ```bash flutter build appbundle --release --build-name 1.0.2 --build-number 3 ``` ## 中国 App 研发流程对齐建议 - 需求阶段:已按 PRD 落地 MVP 主流程(店铺/菜品/随机/预算/备份) - 设计阶段:下一步建议补 Figma 高保真 + 组件规范(按钮、卡片、输入、弹窗) - 开发阶段:可继续分版本迭代 - V1.1:距离筛选、店铺详情页、快速批量录菜 - V1.2:OCR 菜单识别、临时黑名单按日期自动清理 - V2.0:云备份/多端同步 - 测试阶段:补充集成测试(CRUD、随机权重、导入导出回归) - 发布阶段:隐私政策、权限说明、备案信息、应用市场截图物料