-
Notifications
You must be signed in to change notification settings - Fork 166
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix player panel with system navigation bar #656
Conversation
看不上很棒,不过 player_item.dart 中调用 setState 的目的是什么 playerController.danmakuOn 已有拥有了 如果 danmakuOn 的改变没有在期望的位置触发刷新,那么这个位置需要被 Observer 组件 (来自 mobX) 包裹 |
电脑端按下 D 或者按 弹幕开关 按钮会在一定的延迟后才修改播放器面板的状态 我去研究一下 mobX Screen-2025-01-24-122351.mp4 |
但是 player_item, player_item_panel 的 build 顶层 widget 都是 Observer,按理来说不会出现这种问题 |
mobX 没有在文档里提到,这部分的实际行为很奇怪 假如把 Observer 放在最顶层的位置,那么下面的被独立拆分出去的子 widget 不会及时更新,有时会更新,有时不会,有时会延时更新。 需要在被拆分出去的 widget 的顶层,这里是 Widget danmakuTextField() 的顶层 此外这里改成 Widget get danmakuTextField 可能看上去规整一些 这里还有一个小问题,和 danmakuTextField 的焦点处理相关,在输入过一次弹幕后,焦点会始终被 danmakuTextField 捕获。这样在某些场景,例如打开弹幕设置后用返回手势退出,会意外弹出软键盘 |
但这样就导致这个问题更奇怪了,因为弹幕开关 Icon 并不是拆分出去的子 widget,它的表现和 textfield 相同 焦点问题我研究一下 |
啊,我以为 Icon 在 danmakuTextField 下面 总之 mobx 的 Observe 在变量藏在组件树深处时经常不按预期工作 我们这里看上去没有太干净的解决方法 要么用 setState 来强制刷新,要么在 Icon 外面再套一个 Observe |
看上去得用 setState,再套一个 Observer 依然生效的很慢 因为 video_page 改用了 Positioned,TextField 现在还有另外一个问题:点击输入框之后面板不会移动到手机键盘上方,而是被手机键盘挡住 这里原来有更复杂的判断,手机端 420 有点太窄了,可以考虑把 menuBody 的 gridview 换成一列或者用原来的宽度 Kazumi/lib/pages/video/video_page.dart Lines 389 to 397 in ebc7c8f
|
这个PR在我看来已经没有问题 手机上的宽度和全屏软键盘的问题我们可以留到下一次讨论 |
B 站也是抬高底部面板的做法。
但是阴影不好修改,就降低了渐变的起始颜色透明度,增大高度