Skip to content
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

Merged
merged 4 commits into from
Jan 24, 2025

Conversation

ErBWs
Copy link
Contributor

@ErBWs ErBWs commented Jan 24, 2025

B 站也是抬高底部面板的做法。

但是阴影不好修改,就降低了渐变的起始颜色透明度,增大高度

@Predidit
Copy link
Owner

看不上很棒,不过 player_item.dart 中调用 setState 的目的是什么

playerController.danmakuOn 已有拥有了 @observer 注解并由 mobX 管理状态

如果 danmakuOn 的改变没有在期望的位置触发刷新,那么这个位置需要被 Observer 组件 (来自 mobX) 包裹

@ErBWs
Copy link
Contributor Author

ErBWs commented Jan 24, 2025

电脑端按下 D 或者按 弹幕开关 按钮会在一定的延迟后才修改播放器面板的状态

我去研究一下 mobX

Screen-2025-01-24-122351.mp4

@ErBWs
Copy link
Contributor Author

ErBWs commented Jan 24, 2025

但是 player_item, player_item_panel 的 build 顶层 widget 都是 Observer,按理来说不会出现这种问题

@Predidit
Copy link
Owner

mobX 没有在文档里提到,这部分的实际行为很奇怪

假如把 Observer 放在最顶层的位置,那么下面的被独立拆分出去的子 widget 不会及时更新,有时会更新,有时不会,有时会延时更新。

需要在被拆分出去的 widget 的顶层,这里是 Widget danmakuTextField() 的顶层

此外这里改成 Widget get danmakuTextField 可能看上去规整一些

这里还有一个小问题,和 danmakuTextField 的焦点处理相关,在输入过一次弹幕后,焦点会始终被 danmakuTextField 捕获。这样在某些场景,例如打开弹幕设置后用返回手势退出,会意外弹出软键盘

@ErBWs
Copy link
Contributor Author

ErBWs commented Jan 24, 2025

但这样就导致这个问题更奇怪了,因为弹幕开关 Icon 并不是拆分出去的子 widget,它的表现和 textfield 相同

焦点问题我研究一下

@Predidit
Copy link
Owner

啊,我以为 Icon 在 danmakuTextField 下面

总之 mobx 的 Observe 在变量藏在组件树深处时经常不按预期工作

我们这里看上去没有太干净的解决方法

要么用 setState 来强制刷新,要么在 Icon 外面再套一个 Observe

@ErBWs
Copy link
Contributor Author

ErBWs commented Jan 24, 2025

看上去得用 setState,再套一个 Observer 依然生效的很慢

因为 video_page 改用了 Positioned,TextField 现在还有另外一个问题:点击输入框之后面板不会移动到手机键盘上方,而是被手机键盘挡住

这里原来有更复杂的判断,手机端 420 有点太窄了,可以考虑把 menuBody 的 gridview 换成一列或者用原来的宽度

SlideTransition(
position: _rightOffsetAnimation,
child: SizedBox(
height: MediaQuery.of(context).size.height,
width:
(MediaQuery.of(context).size.width * 1 / 3 > 420
? 420
: MediaQuery.of(context).size.width * 1 / 3),
child: Container(

Screenshot_20250124_153915_com predidit kazumi

@Predidit
Copy link
Owner

这个PR在我看来已经没有问题

手机上的宽度和全屏软键盘的问题我们可以留到下一次讨论

@Predidit Predidit merged commit c4fa67d into Predidit:main Jan 24, 2025
6 checks passed
@ErBWs ErBWs deleted the fix-appearance branch January 24, 2025 07:57
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.

2 participants