Skip to content

feat: 添加弹幕列表面板#1964

Open
ChouChiu wants to merge 20 commits into
Predidit:mainfrom
ChouChiu:let-me-know-the-source!
Open

feat: 添加弹幕列表面板#1964
ChouChiu wants to merge 20 commits into
Predidit:mainfrom
ChouChiu:let-me-know-the-source!

Conversation

@ChouChiu
Copy link
Copy Markdown
Contributor

@ChouChiu ChouChiu commented Apr 11, 2026

What's Changed:

  1. 添加弹幕列表面板

TODO:

  • 点击弹幕跳转

由 LLM 修改

@ChouChiu ChouChiu marked this pull request as ready for review April 11, 2026 08:44
@Predidit
Copy link
Copy Markdown
Owner

我还没来得及仔细查看这个PR的代码

不过我注意到竖屏状态下的弹幕发送条被删除了,这基于什么考虑。还是只是AI的工作失误。

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我还没来得及仔细查看这个PR的代码

不过我注意到竖屏状态下的弹幕发送条被删除了,这基于什么考虑。还是只是AI的工作失误。

因为位置不够溢出了

@Predidit
Copy link
Copy Markdown
Owner

如果这是你的有意的设计和取舍,这个功能被移除应该出现在这个PR的描述中

而且这是一个有用的功能,可以改变它的位置,但不应该被删除

也许我们可以考虑把弹幕面板挪到一个 bottomsheet 中

@ChouChiu
Copy link
Copy Markdown
Contributor Author

也许我们可以考虑把弹幕面板挪到一个 bottomsheet 中

emmm.. 试了一下不太好看

这样子呢
image

@Predidit
Copy link
Copy Markdown
Owner

我的意思是,也许可以尝试把本pr实现的弹幕面板移动到bottomsheet中,而不是移动位置已经很好地弹幕发送文本框

@ChouChiu
Copy link
Copy Markdown
Contributor Author

这样?

image image

@Predidit
Copy link
Copy Markdown
Owner

差不多,但是弹幕按钮的位置需要调整

此外此pr使用了一些硬编码色彩,这是需要避免的,使用 colorsheme 中的色彩,这样才能正确适配主题

可以考虑其他ai工作流,即使只考虑 coding plan,也可以试试其他模型,现在的工作流生成的模式需要的返工和审查次数实在是太多了,大家的心智负担都很高

@ChouChiu
Copy link
Copy Markdown
Contributor Author

ChouChiu commented Apr 11, 2026

差不多,但是弹幕按钮的位置需要调整

我在这方面没有什么头绪,先推送了

此外此pr使用了一些硬编码色彩,这是需要避免的,使用 colorsheme 中的色彩,这样才能正确适配主题

指的是弹幕面板中的来源品牌色吗

可以考虑其他ai工作流,即使只考虑 coding plan,也可以试试其他模型,现在的工作流生成的模式需要的返工和审查次数实在是太多了,大家的心智负担都很高

当前套餐里最强的就这个了。。。 我换个工具试试

@Predidit
Copy link
Copy Markdown
Owner

是的,指来源品牌色

@ChouChiu
Copy link
Copy Markdown
Contributor Author

是的,指来源品牌色

但是正因为是品牌色才会硬编码啊

@Predidit
Copy link
Copy Markdown
Owner

但是我们并不能做到良好的设计,无法做到使其在亮色与暗色模式均不突兀,在这种考虑下使用 colorsheme 明显更好

@ChouChiu
Copy link
Copy Markdown
Contributor Author

emm... 似乎不如硬编码方案

image

@Predidit
Copy link
Copy Markdown
Owner

这个视觉效果好多了,如果你觉得三种颜色间缺乏区分度,可以尝试 colorsheme 中其他颜色

弹幕列表中的弹幕没有必要按照原样渲染,这样视觉效果很突兀,使用简单的文本就好,bilibili就是这样设计的

@ChouChiu

This comment was marked as outdated.

@ChouChiu
Copy link
Copy Markdown
Contributor Author

ChouChiu commented Apr 12, 2026

这个视觉效果好多了,如果你觉得三种颜色间缺乏区分度,可以尝试 colorsheme 中其他颜色

弹幕列表中的弹幕没有必要按照原样渲染,这样视觉效果很突兀,使用简单的文本就好,bilibili就是这样设计的

done,ci怎么炸了

@ChouChiu
Copy link
Copy Markdown
Contributor Author

弹幕来源判断有点问题

Comment thread lib/pages/player/danmaku_list_panel.dart Outdated
Comment thread lib/pages/player/danmaku_list_panel.dart Outdated
Comment thread lib/pages/player/danmaku_list_panel.dart Outdated
Comment thread lib/pages/player/danmaku_list_panel.dart Outdated
@ChouChiu
Copy link
Copy Markdown
Contributor Author

弹幕来源判断有点问题

dandanplay 似乎不会区分来源了

@Predidit
Copy link
Copy Markdown
Owner

我们可以最终完成这个PR,不过如果以后新的PR还是基于 GLM5 构建,那么我就不能进行审查了,可以考虑拜托其他贡献者审查

审查 GLM5 的 PR 的心智负担实在太高了,作为作者的你也需要多次返工,大家的精力都被严重消耗了

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我们可以最终完成这个PR,不过如果以后新的PR还是基于 GLM5 构建,那么我就不能进行审查了,可以考虑拜托其他贡献者审查

审查 GLM5 的 PR 的心智负担实在太高了,作为作者的你也需要多次返工,大家的精力都被严重消耗了

换成 Gemini 了,实在抱歉

@Predidit
Copy link
Copy Markdown
Owner

现在样板代码有些太多了,考虑复用 lib\modules\danmaku\danmaku_module.dart 实体类

必要的话可修改此实体类,例如将 souce 属性变为 enum ,但是需要适配之前使用此实体类的相关代码

Comment thread lib/modules/danmaku/danmaku_module.dart Outdated
Comment thread lib/pages/player/danmaku_list_panel.dart Outdated
Comment thread lib/modules/danmaku/danmaku_module.dart Outdated
@ChouChiu

This comment was marked as resolved.

Comment thread lib/pages/video/video_page.dart
Comment thread lib/pages/video/video_page.dart
@Predidit
Copy link
Copy Markdown
Owner

我可能需要澄清以下,我对 vibe coding 没有任何意见,#1682 就是用 claude 弄出来的

#1682 是一个超过4000行的庞大实现, ai 做的很好

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我可能需要澄清以下,我对 vibe coding 没有任何意见,#1682 就是用 claude 弄出来的

#1682 是一个超过4000行的庞大实现, ai 做的很好

我在这方面没有什么经验,我的财力负担不起 Claude,而且 Claude 在编码方面的地位是无可动摇的

Comment thread lib/pages/player/player_controller.dart Outdated
@Predidit
Copy link
Copy Markdown
Owner

添加了一个关于性能的评论,此外我有一个小问题,现在弹幕面板过滤弹幕只会在面板生效,不会影响当前剧集弹幕上屏

但是同时,在弹幕面板过滤弹幕的开关是持久化的,这种开关会在下一个播放器初始化,例如切换到下一集时让对应被筛选的弹幕不再上屏

这个行为是否符合预期

@Predidit
Copy link
Copy Markdown
Owner

mobx 还是一团乱麻, ai 无法做到重写这部分吗

@ChouChiu
Copy link
Copy Markdown
Contributor Author

mobx 还是一团乱麻, ai 无法做到重写这部分吗

大概是的,换了几个模型都无法做到,可能需要介入

@Predidit
Copy link
Copy Markdown
Owner

维持这个PR在当前位置, 稍后我来调试

@Predidit
Copy link
Copy Markdown
Owner

一直是 hive 社区版, 我只是重新运行了一下 build_runner

不需要的逻辑基本删光了, 舒服多了

flutter devtools 显示卡顿的原因是乱七八糟的 mobx 导致的重建, 而不是需要分页加载, 所以分页加载逻辑也删掉了

还有一些小问题, 例如更换分集时弹幕面板内容不会清空, 直到下集加载完成, 你要是有兴趣的话可以修一下, 要是没兴趣的话, 我明天或者后天修

@Predidit
Copy link
Copy Markdown
Owner

这就是低性能AI的问题, 它的功能可能看上去没错, 但是实际有性能问题, 代码冗余和设计上的反模式

@ChouChiu
Copy link
Copy Markdown
Contributor Author

GLM 5,Gemini 3.1 Pro 和 GPT 5.3 Codex 不算低性能了罢,纯粹是我不会用

@ChouChiu ChouChiu requested a review from Predidit April 16, 2026 10:52
@Predidit
Copy link
Copy Markdown
Owner

5ec4bef 仅从代码上来看应该是个无效的提交,对解决上面我提到的问题应该没有帮助,不过我没有实际测试

如果你对解决这个问题没有什么头绪,我会在周末提交解决方案然后合并这个PR

@ChouChiu
Copy link
Copy Markdown
Contributor Author

5ec4bef 仅从代码上来看应该是个无效的提交,对解决上面我提到的问题应该没有帮助,不过我没有实际测试

如果你对解决这个问题没有什么头绪,我会在周末提交解决方案然后合并这个PR

我测试过换集是会清空弹幕列表并重新加载

@Predidit
Copy link
Copy Markdown
Owner

我指的是当画面是 视频解析中 时,弹幕面板就应该清空,而不是实际上加载下一个视频时清空

@ChouChiu
Copy link
Copy Markdown
Contributor Author

ChouChiu commented Apr 16, 2026

调试过程中遇到一些困难,使用发行版也会有这个问题

*** Request ***
uri: https://api.dandanplay.net/api/v2/bangumi/bgmtv/515759

media_kit: D3D11Renderer: Direct3D Feature Level: 11_1
1 1
media_kit: VideoOutput: Create Texture: 2229560113824
media_kit: VideoOutput: Using native D3D11 H/W rendering.
VideoOutput.Resize
{handle: 2229556867360, id: 2229560113824, rect: {height: 0, left: 0, top: 0, width: 0}}
NativeVideoController: Texture ID: 2229560113824
[i] 19:37:13.779 (+0:00:16.925060) INFO    PlayerController: video initialized
Starting SMTC...
*** DioException ***:
uri: https://api.dandanplay.net/api/v2/bangumi/bgmtv/515759
DioException [bad response]: This exception was thrown because the response has a status code of 403 and RequestOptions.validateStatus was configured to throw for this status code.
The status code of 403 has the following meaning: "Client error - the request contains bad syntax or cannot be fulfilled"
Read more about status codes at https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
In order to resolve this exception you typically have either to verify and fix your request code or you have to fix the server code.

*** Response ***
uri: https://api.dandanplay.net/api/v2/bangumi/bgmtv/515759


┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: []("episodes")
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.w.<anonymous closure> (package:kazumi/utils/logger.dart:213:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.w (package:kazumi/utils/logger.dart:213:5)
│ #4   _PlayerController.getDanDanmakuByBgmBangumiID (package:kazumi/pages/player/player_controller.dart:754:22)
│ #5   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 19:37:13.920 (+0:00:17.066303)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ PlayerController: failed to get danmaku [BgmBangumiID] 515759
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
[2026-04-12 10:43:52.670381]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: [](0)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiEpisodeByID (package:kazumi/request/bangumi.dart:233:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID (package:kazumi/pages/video/video_controller.dart:342:19)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:43:52.654 (+0:02:16.678636)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:43:52.972793]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ type '_Map<String, String>' is not a subtype of type 'List<dynamic>'
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiCommentsByEpisodeID (package:kazumi/request/bangumi.dart:267:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID.<anonymous closure> (package:kazumi/pages/video/video_controller.dart:344:15)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:43:52.966 (+0:02:16.990669)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode comments failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:43:58.633893]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: [](0)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiEpisodeByID (package:kazumi/request/bangumi.dart:233:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID (package:kazumi/pages/video/video_controller.dart:342:19)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:43:58.624 (+0:02:22.648923)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:43:58.946408]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ type '_Map<String, String>' is not a subtype of type 'List<dynamic>'
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiCommentsByEpisodeID (package:kazumi/request/bangumi.dart:267:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID.<anonymous closure> (package:kazumi/pages/video/video_controller.dart:344:15)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:43:58.937 (+0:02:22.961443)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode comments failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:44:02.137487]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: [](0)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiEpisodeByID (package:kazumi/request/bangumi.dart:233:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID (package:kazumi/pages/video/video_controller.dart:342:19)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:44:02.124 (+0:02:26.148996)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:44:02.459380]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ type '_Map<String, String>' is not a subtype of type 'List<dynamic>'
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiCommentsByEpisodeID (package:kazumi/request/bangumi.dart:267:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID.<anonymous closure> (package:kazumi/pages/video/video_controller.dart:344:15)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:44:02.451 (+0:02:26.475837)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode comments failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:44:09.269384]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: [](0)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiEpisodeByID (package:kazumi/request/bangumi.dart:233:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID (package:kazumi/pages/video/video_controller.dart:342:19)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:44:09.266 (+0:02:33.290422)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:44:09.576531]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ type '_Map<String, String>' is not a subtype of type 'List<dynamic>'
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiCommentsByEpisodeID (package:kazumi/request/bangumi.dart:267:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID.<anonymous closure> (package:kazumi/pages/video/video_controller.dart:344:15)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:44:09.564 (+0:02:33.588593)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode comments failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:44:12.754808]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: [](0)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiEpisodeByID (package:kazumi/request/bangumi.dart:233:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID (package:kazumi/pages/video/video_controller.dart:342:19)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:44:12.751 (+0:02:36.775855)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-12 10:44:13.020999]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ type '_Map<String, String>' is not a subtype of type 'List<dynamic>'
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.e.<anonymous closure> (package:kazumi/utils/logger.dart:219:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.e (package:kazumi/utils/logger.dart:219:5)
│ #4   BangumiHTTP.getBangumiCommentsByEpisodeID (package:kazumi/request/bangumi.dart:267:22)
│ #5   <asynchronous suspension>
│ #6   _VideoPageController.queryBangumiEpisodeCommentsByID.<anonymous closure> (package:kazumi/pages/video/video_controller.dart:344:15)
│ #7   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 10:44:13.016 (+0:02:37.040369)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ Network: resolve bangumi episode comments failed
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-16 19:26:57.968216]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: []("episodes")
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.w.<anonymous closure> (package:kazumi/utils/logger.dart:213:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.w (package:kazumi/utils/logger.dart:213:5)
│ #4   _PlayerController.getDanDanmakuByBgmBangumiID (package:kazumi/pages/player/player_controller.dart:754:22)
│ #5   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 19:26:57.937 (+0:00:11.691326)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ PlayerController: failed to get danmaku [BgmBangumiID] 515759
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-16 19:27:06.662378]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: []("episodes")
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.w.<anonymous closure> (package:kazumi/utils/logger.dart:213:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.w (package:kazumi/utils/logger.dart:213:5)
│ #4   _PlayerController.getDanDanmakuByBgmBangumiID (package:kazumi/pages/player/player_controller.dart:754:22)
│ #5   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 19:27:06.656 (+0:00:20.410582)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ PlayerController: failed to get danmaku [BgmBangumiID] 515759
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-16 19:27:20.191471]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: []("episodes")
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.w.<anonymous closure> (package:kazumi/utils/logger.dart:213:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.w (package:kazumi/utils/logger.dart:213:5)
│ #4   _PlayerController.getDanDanmakuByBgmBangumiID (package:kazumi/pages/player/player_controller.dart:754:22)
│ #5   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 19:27:20.188 (+0:00:33.942675)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ PlayerController: failed to get danmaku [BgmBangumiID] 515759
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-16 19:31:46.426672]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: []("episodes")
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.w.<anonymous closure> (package:kazumi/utils/logger.dart:213:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.w (package:kazumi/utils/logger.dart:213:5)
│ #4   _PlayerController.getDanDanmakuByBgmBangumiID (package:kazumi/pages/player/player_controller.dart:754:22)
│ #5   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 19:31:46.415 (+0:00:20.820796)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ PlayerController: failed to get danmaku [BgmBangumiID] 515759
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

[2026-04-16 19:37:13.991972]
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ NoSuchMethodError: The method '[]' was called on null.
│ Receiver: null
│ Tried calling: []("episodes")
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ #0   KazumiLogPrinter.log (package:kazumi/utils/logger.dart:52:18)
│ #1   KazumiLogger.w.<anonymous closure> (package:kazumi/utils/logger.dart:213:24)
│ #2   KazumiLogger._log (package:kazumi/utils/logger.dart:188:12)
│ #3   KazumiLogger.w (package:kazumi/utils/logger.dart:213:5)
│ #4   _PlayerController.getDanDanmakuByBgmBangumiID (package:kazumi/pages/player/player_controller.dart:754:22)
│ #5   <asynchronous suspension>
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ 19:37:13.920 (+0:00:17.066303)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ PlayerController: failed to get danmaku [BgmBangumiID] 515759
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

@ChouChiu

This comment was marked as low quality.

@Predidit
Copy link
Copy Markdown
Owner

我们的仓库里公开的用于调试 API key 被拉黑了

我会发一封邮件询问相关情况,如果是因为被滥用在其他项目而拉黑,大概是不能得到更换的,因为这意味着本项目的公开的测试 key 已经被盯上,更换没有止境

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我们的仓库里公开的用于调试 API key 被拉黑了

我会发一封邮件询问相关情况,如果是因为被滥用在其他项目而拉黑,大概是不能得到更换的,因为这意味着本项目的公开的测试 key 已经被盯上,更换没有止境

sad

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我们的仓库里公开的用于调试 API key 被拉黑了

我会发一封邮件询问相关情况,如果是因为被滥用在其他项目而拉黑,大概是不能得到更换的,因为这意味着本项目的公开的测试 key 已经被盯上,更换没有止境

但是为什么发行版也会有这个问题

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我们的仓库里公开的用于调试 API key 被拉黑了

我会发一封邮件询问相关情况,如果是因为被滥用在其他项目而拉黑,大概是不能得到更换的,因为这意味着本项目的公开的测试 key 已经被盯上,更换没有止境

该问题似乎仍然没有解决,此 PR 貌似停在这里了 似了

@Predidit
Copy link
Copy Markdown
Owner

我已经拿到了测试用的 key ,不过我现在在考虑此功能的必要性,我们现在已经不能区分不同来源的弹幕了

@ChouChiu
Copy link
Copy Markdown
Contributor Author

我已经拿到了测试用的 key ,不过我现在在考虑此功能的必要性,我们现在已经不能区分不同来源的弹幕了

仅仅作为一个弹幕列表?就像 B 站网页端那样

}

class _DanmakuListPanelState extends State<DanmakuListPanel> {
final PlayerController playerController = Modular.get<PlayerController>();
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不应该在 State 字段初始化时直接执行 Modular.get()

这是最近刚修复的竞态问题,在其他页面可以这样做,但是播放器页面的生命周期高度复杂且耦合,这样做特定情况下可能导致崩溃

参考现有代码明确把 PlayerController 延后到首帧后加载,并捕获失败

// PlayerController is route-scoped and may not be registered until after
// the first frame.
WidgetsBinding.instance.addPostFrameCallback((_) {
_loadPlayerController();
});
}
void _loadPlayerController() {
if (!mounted) {
return;
}
try {
_playerController = Modular.get<PlayerController>();
} catch (e) {
KazumiLogger().e(
'VideoPage: failed to load PlayerController',
error: e,
);
if (mounted) {

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