Files
platforms/docs/操作日志_用户端APP_报修语音输入_20260908.md

32 lines
3.4 KiB
Markdown
Raw Normal View History

# 报修语音输入操作日志
操作时间2026-09-08。操作类型扩展。影响模块图05故障描述、系统权限。
## 实现
`speech_to_text 7.4.0` 调用设备系统识别服务;只在点击语音输入时初始化和申请权限。应用不保存录音文件,不向业务后端发送音频,系统识别服务可能使用网络。识别结果进入原故障描述,可在结束后校对编辑,再沿用既有草稿与报修提交接口。
`RepairSpeech` 接口隔离平台和组件测试;`SystemRepairSpeech.instance` 复用唯一系统实例,优先匹配设备提供的 zh-CN 语种。`RepairSpeechButton` 保存启动时的文本与选区将本轮完整识别结果替换同一区域避免中间结果重复追加。保留前后文字按字符簇限制2000字避免截断表情。拒绝权限、不可用、网络错误、无识别结果均有中文反馈已有文字保留。
识别期间禁止下一步、暂存、地址切换及照片操作;用户可结束识别。初始化时的系统授权窗口可能触发 inactive不能误判为切后台paused、离页和50秒兜底超时会取消识别迟到回调不再修改输入。
## 变更文件
- `apps/user_app/lib/data/services/repair_speech.dart`:系统单例适配、识别回调、停止与取消。
- `apps/user_app/lib/ui/features/tickets/repair_speech_button.dart`:文字选区保护、状态、权限错误与生命周期。
- `apps/user_app/lib/ui/features/tickets/repair_page.dart`:描述框内语音入口、识别中操作约束。
- `apps/user_app/android/app/src/main/AndroidManifest.xml`:麦克风权限及 RecognitionService 查询;显式禁用蓝牙识别支持,未额外申请蓝牙权限。
- `apps/user_app/ios/Runner/Info.plist`:麦克风和语音识别用途;相机/相册用途补充实际报修照片功能。
- `apps/user_app/pubspec.yaml``pubspec.lock`新增speech_to_text及3项传递依赖未升级其他既有依赖。
- `apps/user_app/test/ui/repair_speech_test.dart`5项语音组件测试。
## 验证
analyze无问题全量68项测试通过随后增加权限弹窗/切后台边界语音5项定向测试全部通过。8组图05视觉与滚动溢出检查通过已打开390×844实际截图语音按钮位于故障描述框右下。Web Release构建通过API地址为127.0.0.1:12426。
Android Debug构建通过174.4秒),产物 `apps/user_app/build/app/outputs/flutter-apk/app-debug.apk`159209325字节。本次APK编译的API地址为127.0.0.1:12426设备运行需通过adb reverse转发12426端口或重新构建指定设备可访问的API地址不能直接把手机环回地址当开发电脑。该构建仍提示speech_to_text/tobias的旧Kotlin Gradle插件兼容性警告未阻止当前构建未来升级Flutter需复核。
原API/Web进程已退出且旧临时API文件不存在已重新编译启动API与Web预览仍读取原远程配置。浏览器重新登录测试账户后实际看到描述框中的语音输入入口控制台无警告/错误;本轮未开启麦克风,没有采集现场声音、修改地址或提交工单。
识别平台能力以[插件官方说明](https://pub.dev/packages/speech_to_text/versions/7.4.0)为准。自动化测试注入可控识别结果不等同于真实麦克风语音成功Android/iOS设备和实际语音采集仍未验收。没有新增数据库字段、后端接口或迁移PostgreSQL和Redis保持原远程配置。