Skip to content

fix(ui): 修复视频页 Hero 动画优化引入的旋转与全屏异常 - #162

Merged
wm-develop merged 1 commit into
dev4harmony:ohosfrom
wm-develop:ohos
Aug 12, 2026
Merged

wm-develop merged 1 commit into
dev4harmony:ohosfrom
wm-develop:ohos

Conversation

@wm-develop

Copy link
Copy Markdown
Member

问题描述

4111c92(refactor(ui): 优化视频页Hero 动画卡顿)引入后出现两个回归:

  1. 进入视频页后旋转行为异常:横屏时界面表现如同开启了「横屏适配」。
  2. 全屏按钮偶发「转了又转回去」:点击全屏后出现旋转动画,但随即被转回竖屏并退出全屏。

原因

该提交为支持 Hero 封面过渡,把 _VideoDetailPageVState 的初始化整体延后到 Future.delayed(启用 Hero 时延迟 300ms),didChangeDependencies 的布局计算也改为延迟执行,期间 build 渲染空壳。这破坏了页面旋转/全屏状态机依赖的两个前提:

  • isPortrait 不再总是 build 时的当前值:旋转后布局计算延迟到下一帧才落地,childWhenDisabled 的自动退全屏分支会在「窗口已横屏、isPortrait 仍为竖屏」的帧被误触发,进而调用 _restorePageOrientation() 把窗口硬掰回竖屏——即症状 2。
  • _unlockOrientation() 延迟 300ms:其 _orientationHolders 静态计数与页面栈生命周期(dispose/didPushNext 中同步的 _lockOrientation)错位,关闭「横屏适配」时的方向锁在叠栈/进出页面时漏锁或锁错时机——即症状 1。

修复方案

在保留 Hero 动画优化(重活仍延迟、过渡期渲染空壳)的前提下,将方向/布局状态恢复到首帧同步计算:

  1. initState:VideoDetailController 创建、hideSystemBar、_unlockOrientation() 提前到同步执行。控制器构造本身轻量(onInit 仅初始化字段),网络请求与播放器初始化仍在延迟回调中,不影响 Hero 过渡流畅度。
  2. didChangeDependencies:移除 Future.delayed 包裹,恢复同步计算 isPortrait/maxWidth/maxHeight,保证每次 build 读到的是当前方向。

影响范围

仅 lib/pages/video/view.dart。

@wm-develop
wm-develop merged commit 8d14b36 into dev4harmony:ohos Aug 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant