## 等待态 原来是 assets/lottie/meeting_wait.json —— 一张「JOIN」对话气泡插画,和本页在做的事 (把音频变成文稿)没有任何关系,配色也与全站的 222° 冷蓝灰不搭,深色主题下更是一块 突兀的白。改成自绘:上面一排声波表示音频正在被读,下面几条带流光的骨架行预告即将 生成的文稿形状,两者共用同一个 AnimationController。 自绘而不是再换一个 Lottie:① 不用为一个等待态再背一份 json 资源;② 颜色全部走 AppPalette,明暗主题自动跟随,插画做不到;③ 四个 tab(概览/发言/全文/思维导图) 共用同一个等待态,自绘好调。meeting_wait.json 一并删除(全仓零引用;assets/lottie/ 在 pubspec 里是按目录声明的,不用改配置)。 ## 重进后等待态消失 —— tasktype 在两张表里各存一份 真机上那条记录的实际状态是 meeting.tasktype=1 / meetingdetails.tasktype=0: 列表页读前者,显示「转写中」;详情页读后者,拿到 0,于是什么等待态都没有。 两张表分头写,而且中间态漏了: - submitTask / refreshTask / readTask 只调 editMeetingTitle,**只写 meeting** - _queryTask 里写 meetingdetails 的两次都藏在里程碑分支里(>=3、==5/6), 1→2(等待转写→转写中)这一跳、以及失败态 10002,meetingdetails 一次都不写 首次进入之所以有动画,靠的是详情控制器里那句内存赋值 meetingDetails.value.tasktype=1; 控制器一销毁,重进读库就是 0 —— 表现为「退出重进特效就不见了」。 改法: 1. SqfliteApi.setMeetingTaskType(id, type):一个事务同时写两张表,成为写 tasktype 的 **唯一入口**。⚠️ 别再直接 editMeetingTitle({'tasktype': x}),那只写一张。 2. 轮询里的状态推进从两个里程碑分支里提到分支之后无条件执行 —— 数据先落、状态最后推, 详情页的 ever(tasktype) 监听读到新状态时数据已经就位。tasktype.value 同样不再只在 分支里更新,1→2 这一跳现在也会通知 UI。 3. 详情页以 meeting 表那份为准(它是历史上唯一每次状态变化都会写的),给**存量**错位 数据兜底:不用等下一次状态跳变就能立刻正常。 真机验证(华为 ALN-AL80):用那条 details=0/meeting=1 的错位记录进详情,等待态正常 (改前是空白页);退出重进,等待态仍在;退出后查库两张表都是 1;轮询把状态推到失败态后 两张表都是 10002(改前 details 恒为 0);终态下等待态正确消失、显示「分析失败」。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>