Browse Source
_floatingWindowManager 是 late 且只在 onInit 的 `Platform.isAndroid` 分支里赋值 (iOS 走 initPlatformState 那套 SubtitlePip)。全项目 5 处引用里 4 处都带平台守卫, **只有 _disableFloatingWindow() 那处没有** —— 而它恰恰会被 changeTranslationMode 调到 (从多媒体/通话翻译切到同传或面对面时,小窗不受支持要自动关掉)。 iOS 上后果是连锁的,且没有一条指向真因:LateInitializationError 从 changeTranslationMode 中途抛出,后面的 _reinitializeAsrService() 再也走不到; 小窗又没真的停掉,继续浮在同传/面对面页上盖住顶部的标题与按钮;偏偏小窗开关按钮 只在 call/audioVideo 两个模式才渲染,用户连关都关不掉。 - _disableFloatingWindow() 分平台,并收敛成 toggle / onClose / changeTranslationMode 三处共用的唯一出口;Android 分支补 Get.isRegistered 守卫。 - 切到不支持小窗的模式时改成**无条件**关一次,不再依赖 isFloatingWindowEnabled: iOS 上这个标志位由 initPlatformState 里那次异步的 SubtitlePip.isActive() 回填, 和 onInit 紧接着调用的 changeTranslationMode 是竞态,回填晚一步就整个跳过。 没开着时多关一次是无害的。 真机验证(iPhone 12 / iOS 26.6.2):改前在运行中的 App 里直接取 _floatingWindowManager 确实抛 LateInitializationError;改后走完整路径(多媒体翻译 → 开小窗 → 切同传), changeTranslationMode 正常返回、pip=false、widget 树里 ErrorWidget 数为 0。 安卓侧(华为 ALN-AL80,debug + release)同传/面对面两页渲染不受影响。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>main
1 changed files with 27 additions and 30 deletions
Loading…
Reference in new issue