Predidit / Kazumi

基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕。
GNU General Public License v3.0
4.54k stars 112 forks source link

ios版_单击无法唤出视频控制栏 #48

Closed kkskmannn closed 3 months ago

kkskmannn commented 3 months ago

rt,软件运行正常 0BFF08C6-BFBC-4063-8929-22C5D781BCE6 播放页面单击无反应 F8F3D068-A1DA-4DB4-A426-25DCCF5D1290 拖动时方能显示控制栏 833206D6-02D9-445E-862E-A0BCE41C9A04 设备信息:iphone6s ios15.8.2

Predidit commented 3 months ago

我身边暂时没有能用来测试的硬件, Windows和Android平台没有办法复现这一问题,我怀疑这个问题和 PlatformView 相关,一个可能的解决方案在 /lib/pages/video/video_page.dart

您可以在这个文件里尝试调整一下 playItem 在 Stack 中的位置,将其移到最上层 (也就是Stack的尾部) 或许能起作用。

如果问题得到解决的话,您可以尝试提交一个PR

kkskmannn commented 3 months ago

按照您的建议,我调整了playeritem在stack中的位置,得到的结果如下: C0B4A602-62E5-4405-AC08-3F6486D84A85 相较之前能够显示返回按钮,但是单击屏幕仍不能唤出控制栏😂 目前没有mac用来协助调试,只能读代码瞎猜 会不会是playeritem手势控制部分的bug? 代码能力有限,给您添麻烦了

Predidit commented 3 months ago

这让我很困惑,因为行为完全不符合我的预期。

这个返回按钮不来自 /lib/pages/player/player_item.dart 否则他会和上方的追番按钮和倍速播放按钮一起出现。

这个返回按钮来自 https://github.com/Predidit/Kazumi/blob/adbb1b4783f8cda1361445c03a5fa5f47e09b398/lib/pages/video/video_page.dart#L173

是用在视频无法正确解析,播放器未加载,但仍然需要回退的场合。

您是按照我的建议修改的吗,我希望 PlayerItem 所在的 Positioned 和 Webview 所在的 Positioned 交换位置。这样 PlayerItm 会在 Stack 的最底部。Stack最底部的元素将呈现在最上层。

但看上去你是将 PlayerItem 移到了Stack下嵌套的Stack内部,也就是那个返回按钮所在的子Stack,是这样吗。

kkskmannn commented 3 months ago

不好意思,是我搞错了(不过,出现返回按钮的结果是我错把playeritem所在的positioned和上一个positioned交换后得到的)

FB37D471-7E2B-40DD-8939-5A10936D3AC7 将playeritem所在的、与webview所在的positioned交换后,应用没有体现任何变化 再加上使用拖动手势时,控制栏能够显示,所以我认为是手势控制方面的bug

Predidit commented 3 months ago

如果没有变化的话,我也倾向于是playeritem里的问题,但是不知道为什么在 Android/Windows 里无法复现,捕获点按操作来显示控制面板的组件是

https://github.com/Predidit/Kazumi/blob/adbb1b4783f8cda1361445c03a5fa5f47e09b398/lib/pages/player/player_item.dart#L544

我现在对自己当时的写法感到很奇怪,可能是为了防止视频播放时已经通过系统调整过音量,再使用手势操作音量时会出现混乱,所以在这里进行同步。这个部分后续需要修改。

我怀疑可能是这里的问题,可以尝试注释掉除 ontap 中除了 _handleTap 之外的部分,并移除 async 关键字。

如果不行的话,可以尝试移动这个 GestureDetector 到其所在 Stack 的底部。

kkskmannn commented 3 months ago

尝试了两个方法后皆无效果 我尝试把该gesturedetector的ontap调用直接改为playerController.showPositioned = true; 结果能够在播放界面单击一次后显示控制栏 所以,大概还是handletap的问题

—————— 已解决 去除async,将handletap所作操作直接移动至ontap的(){}中后,莫名其妙就可以工作了😰 (调用handletap就不行,这会是为什么)

Predidit commented 3 months ago

只去除 async ,保留 handletap 可以正常工作吗

kkskmannn commented 3 months ago

不行 会不会是编译环境的问题😰

Predidit commented 3 months ago

我现在对这个问题感到很莫名其妙。

我很好奇这个问题在Xcode的模拟器里可以复现吗。

kkskmannn commented 3 months ago

我没有mac,以上操作都是在手机上进行的 构建ipa用的是codemagic平台,虽然其使用mac虚拟机,但配置我都选择了默认,可能会有差错 所以我怀疑 会不会是我的构建有问题

Right-Pro commented 3 months ago

您好,关于如何在 iOS/iPadOS 设备上使用 codemagic 平台构建 ipa,我想请教您更详细的内容,可否帮忙告知

Predidit commented 3 months ago

使用 codemagic 进行构建是没有必要的。

Github 本身的 Github Actions 作为 CI/CD 平台已经足够好用,并且对非私有仓库还是不计费的。

我已经更新了本项目的 workflow 文件,现在可以分叉本储存库后使用 Github Actions 进行 iOS 构建。

Predidit commented 3 months ago

1.2.0 已经发布,包含 iOS 构建,检查此版本是否有问题

kkskmannn commented 3 months ago

感谢! 经测试,控制栏问题仍然存在,去除async并注释debug也无效果 (另:不知为何workflow把build/ios/iphoneos目录也压缩进了ipa,正常情况下应当只有payload)

Predidit commented 3 months ago

我的 workflow 写的有问题,稍后我会进行修复。

这样的话可以正确安装吗。

kkskmannn commented 3 months ago

有多余目录的情况下,会因找不到app bundle而安装失败 以上测试结果为手工修改workflow所构建ipa打包、安装后得出的

Predidit commented 3 months ago

你有兴趣提交一个修改 workflow 的PR吗

kkskmannn commented 3 months ago

很小的改动… 不过pr了 想了一下,是不是xcode比较严格,_handletap没加()就不认为是函数调用

Predidit commented 3 months ago

PR 已经合并。

和Xcode没有关系,这部分的语义处理是由 dart 工具链完成的。我会使用你提出的解决方案,将 _handletap 展开。

Predidit commented 3 months ago

我没有将 _handletap 展开, 但使用了其他的方法进行状态管理,问题应该已经得到解决。

包含补丁的 1.2.1 版本已经发布