feat: add Flutter web build support
This commit is contained in:
@@ -103,9 +103,9 @@
|
||||
|
||||
### 7.1 平台、工程与原型边界
|
||||
|
||||
- 用户端只交付 Android、iOS,不建设 Flutter Web、桌面端或小程序兼容层。平台差异通过适配器隔离,不在业务页面散落 `Platform.isAndroid`、`Platform.isIOS` 判断。
|
||||
- 用户端交付 Android、iOS、Web;Web 作为浏览器入口,不延伸为桌面端或小程序兼容层。平台差异通过适配器隔离,不在业务页面散落 `Platform.isAndroid`、`Platform.isIOS` 判断。Web 生产部署必须使用 HTTPS,并通过 `--dart-define=API_BASE_URL=...` 注入 API 地址。
|
||||
- 生产工程按规划放在 `apps/user_app`;当前 `ui` 目录是基于产品设计图制作的交互原型,仅用于视觉、信息架构和流程确认,不得把其中的演示数据或模拟成功状态当作业务实现。
|
||||
- Flutter 与 Dart 版本由工程根目录的版本管理文件和 CI 固定;升级 SDK、Gradle、Kotlin、Xcode、CocoaPods 或插件时必须单独验证 Android/iOS 构建、权限和深链。
|
||||
- Flutter 与 Dart 版本由工程根目录的版本管理文件和 CI 固定;升级 SDK、Gradle、Kotlin、Xcode、CocoaPods 或插件时必须单独验证 Android/iOS/Web 构建、权限和深链。
|
||||
- 应用令牌的 client claim 固定为 `user_app`,API 根路径固定为 `/heqi/client/v1/user`;不得复用 `service_app` 或任何管理后台会话。
|
||||
|
||||
### 7.2 分层结构与依赖方向
|
||||
@@ -163,7 +163,7 @@ apps/user_app/lib/
|
||||
|
||||
### 7.5 本地数据、安全与平台能力
|
||||
|
||||
- 访问令牌、刷新令牌和支付相关临时凭据只进入 Android Keystore / iOS Keychain 支持的安全存储;日志、崩溃报告、埋点和剪贴板不得记录令牌、支付密码、完整手机号、地址或定位。
|
||||
- 访问令牌、刷新令牌和支付相关临时凭据只进入 Android Keystore / iOS Keychain 支持的安全存储,Web 仅可在 HTTPS 域名使用浏览器安全存储;日志、崩溃报告、埋点和剪贴板不得记录令牌、支付密码、完整手机号、地址或定位。
|
||||
- 普通缓存只保存可恢复数据并设置版本与过期时间。安全事件、资金、订单和设备命令的服务端事实不能由本地缓存覆盖;退出登录时按数据分类清理。
|
||||
- Android/iOS 的相机、相册、蓝牙、定位、通知权限均采用使用时申请和拒绝后降级。定位失败提供手动地址入口;蓝牙失败提供扫码或手动设备码入口。
|
||||
- 推送点击必须先恢复会话并重新向服务端读取对象状态;通知载荷不得包含完整地址、手机号、支付信息或可直接执行设备控制的凭证。
|
||||
@@ -174,4 +174,4 @@ apps/user_app/lib/
|
||||
- 设计基线以 `doc/用户端APP-产品设计` 和 `ui/?app=user` 为准:安全蓝为主色,瓶阀状态、告警与命令回执优先于营销内容。危险、警告、成功不能只靠颜色表达。
|
||||
- 使用统一 ThemeExtension 管理颜色、圆角、间距、阴影和状态色;正文最小字号、动态字体缩放、44×44 logical pixels 触控目标、屏幕阅读器语义和对比度必须在 Android/iOS 真机验证。
|
||||
- ViewModel、Use Case、Repository 覆盖单元测试;瓶阀状态、支付、登录守卫和错误恢复覆盖 Widget 测试;扫码绑定、开关阀回执、下单支付、订单轨迹覆盖集成测试。
|
||||
- 每次合并至少执行 `flutter analyze`、`flutter test`、Android debug 构建和 iOS Simulator 构建;涉及相机、蓝牙、推送、支付、Universal Links/App Links 的改动还须执行对应真机回归。
|
||||
- 每次合并至少执行 `flutter analyze`、`flutter test`、Android debug 构建、iOS Simulator 构建和 Web release 构建;涉及相机、蓝牙、推送、支付、Universal Links/App Links 的改动还须执行对应真机或浏览器回归。
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
|
||||
### 9.1 平台、角色与工程边界
|
||||
|
||||
- 服务人员端只交付 Android、iOS。生产工程按规划放在 `apps/service_app`;当前 `ui` 目录是配送、安装维修、安检三类原型的交互实现,不连接真实定位、相机、蓝牙、支付或业务 API。
|
||||
- 服务人员端交付 Android、iOS、Web。生产工程按规划放在 `apps/service_app`;Web 只支持浏览器前台授权的位置与相机能力,不作为后台定位或后台任务的替代方案。当前 `ui` 目录是配送、安装维修、安检三类原型的交互实现,不连接真实定位、相机、蓝牙、支付或业务 API。
|
||||
- 三类岗位共用一个 Flutter 应用和登录体系,每个账号仅有一个服务岗位,令牌 client claim 固定为 `service_app` 并携带唯一 `role_code`。岗位变更必须由后台完成并重新登录换取令牌;客户端不提供角色切换。
|
||||
- 工作人员 API 根路径固定为 `/heqi/client/v1/staff`。客户端不得访问用户端、平台后台、气站后台或配送点后台的令牌与接口。
|
||||
- 首期后端不提供工作人员自助注册时,Flutter 注册页面不得伪造成功;若未来开放申请,只能创建待审核账户,不能直接授予岗位能力。
|
||||
@@ -203,6 +203,8 @@ apps/service_app/lib/
|
||||
|
||||
### 9.6 Android/iOS 平台适配
|
||||
|
||||
Web 生产部署必须使用 HTTPS,并通过 `--dart-define=API_BASE_URL=...` 注入 API 地址。浏览器草稿和附件只保存 AES-GCM 密文;不支持 Android/iOS 的持续后台定位与后台任务保障。
|
||||
|
||||
| 能力 | Android | iOS |
|
||||
| --- | --- | --- |
|
||||
| 相机/相册 | 运行时按用途申请 Camera/Photo Picker,使用系统选择器优先 | 使用相机和 Photos 限定访问,解释用途并处理 Limited 状态 |
|
||||
@@ -221,4 +223,4 @@ apps/service_app/lib/
|
||||
- 任务详情优先展示任务号、类型、预约/SLA、地址、脱敏联系人、风险与允许动作。固定底部操作按钮不得遮挡检查项、签名或系统安全区。
|
||||
- 长清单使用惰性列表和分段保存;照片视频缩略图解码、压缩和上传移出 UI isolate。后台轨迹、上传和补传必须受电量、网络与系统调度约束,不用常驻无限循环。
|
||||
- ViewModel、Use Case、Repository、离线队列和冲突处理覆盖单元测试;角色/组织守卫、步骤前置、风险结论和弱网状态覆盖 Widget 测试;三角色主闭环覆盖 Android/iOS 集成测试。
|
||||
- 每次合并至少执行 `flutter analyze`、`flutter test`、Android debug 构建和 iOS Simulator 构建;定位、相机、蓝牙、推送、后台任务、App Links/Universal Links 和安全存储改动必须真机回归。
|
||||
- 每次合并至少执行 `flutter analyze`、`flutter test`、Android debug 构建、iOS Simulator 构建和 Web release 构建;定位、相机、蓝牙、推送、后台任务、App Links/Universal Links 和安全存储改动必须真机或浏览器回归。
|
||||
|
||||
@@ -74,9 +74,9 @@ flowchart LR
|
||||
|
||||
### 4.2 Flutter 工程落地基线
|
||||
|
||||
- 生产工程已落在 `apps/user_app` 与 `apps/service_app`,只生成 Android、iOS 平台目录;`ui` 继续作为视觉和交互原型,不作为运行时依赖。
|
||||
- 生产工程已落在 `apps/user_app` 与 `apps/service_app`,生成 Android、iOS、Web 平台目录;`ui` 继续作为视觉和交互原型,不作为运行时依赖。Web 构建通过仓库根目录 `scripts/build-apps.sh` 输出,生产环境必须注入 HTTPS `API_BASE_URL`。
|
||||
- 两个 App 使用 `MaterialApp.router`、`go_router`、MVVM + Repository 与注入的平台 Service。HTTP 根地址通过 `--dart-define=API_BASE_URL=...` 注入;用户端和工作人员端分别固定访问 `/heqi/client/v1/user` 与 `/heqi/client/v1/staff`,JWT 请求头沿用当前服务端原始令牌契约。
|
||||
- 访问令牌保存在 Android Keystore / iOS Keychain 支持的安全存储。服务端 App 的现场草稿和附件按账号使用 AES-GCM 加密;恢复网络后才上传并执行最终业务提交。
|
||||
- 访问令牌保存在 Android Keystore / iOS Keychain 支持的安全存储;Web 使用浏览器安全存储,且只能部署在 HTTPS 域名。服务端 App 的现场草稿和附件按账号使用 AES-GCM 加密;Web 仅保存密文,恢复网络后才上传并执行最终业务提交。浏览器端不承担 Android/iOS 的后台定位保障。
|
||||
- 充值 Mock 确认只允许 Debug/开发联调,Release UI 不注册该入口;未落地的设备控制、收藏、押金、消息和发票能力不得以静态成功状态替代。
|
||||
|
||||
## 5. 研发目录规划(建议)
|
||||
|
||||
Reference in New Issue
Block a user