{"id":17977442,"url":"https://github.com/predidit/canvas_danmaku","last_synced_at":"2025-08-16T05:31:48.500Z","repository":{"id":241865495,"uuid":"808070819","full_name":"Predidit/canvas_danmaku","owner":"Predidit","description":"简易高性能的flutter弹幕组件","archived":false,"fork":false,"pushed_at":"2024-11-17T05:14:04.000Z","size":354,"stargazers_count":8,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-04T13:24:09.429Z","etag":null,"topics":["danmaku","flutter"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/canvas_danmaku","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Predidit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-30T10:19:54.000Z","updated_at":"2024-11-17T05:14:07.000Z","dependencies_parsed_at":"2024-06-10T15:25:15.293Z","dependency_job_id":"39c484aa-003d-4f39-9594-07658222b9b2","html_url":"https://github.com/Predidit/canvas_danmaku","commit_stats":null,"previous_names":["predidit/canvas_danmaku"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Predidit%2Fcanvas_danmaku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Predidit%2Fcanvas_danmaku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Predidit%2Fcanvas_danmaku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Predidit%2Fcanvas_danmaku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Predidit","download_url":"https://codeload.github.com/Predidit/canvas_danmaku/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230012982,"owners_count":18159600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["danmaku","flutter"],"created_at":"2024-10-29T17:27:55.330Z","updated_at":"2025-08-16T05:31:48.485Z","avatar_url":"https://github.com/Predidit.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nThis README describes the package. If you publish this package to pub.dev,\nthis README's contents appear on the landing page for your package.\n\nFor information about how to write a good package README, see the guide for\n[writing package pages](https://dart.dev/guides/libraries/writing-package-pages).\n\nFor general information about developing packages, see the Dart guide for\n[creating packages](https://dart.dev/guides/libraries/create-library-packages)\nand the Flutter guide for\n[developing packages and plugins](https://flutter.dev/developing-packages).\n--\u003e\n\n## 概述\n\n一个使用 `CustomPainter` 进行直接绘制的简易高性能 `flutter` 弹幕组件\n\n## 示例\n\n``` yaml\ndependencies: \n  canvas_danmaku: ^0.2.7\n```\n\nExample:\n\n```dart\n\nimport 'package:canvas_danmaku/canvas_danmaku.dart';\n\nclass _DanmakuPageState extends State\u003cDanmakuPage\u003e {\n    late DanmakuController _controller;\n    @override\n    Widget build(BuildContext context) {\n        return Stack(\n        children: [\n            // 你的自定义组件，例如一个播放器\n            Container(),\n            // 弹幕组件\n            DanmakuScreen(\n            createdController: (e) {\n                _controller = e;\n            },\n            option: DanmakuOption(),\n            ),\n        ],\n        );\n    }\n}\n\n```\n\n## 说明\n\n本项目接口设计参考 `ns_danmaku` ，支持 `ns_danmaku` 的大部分功能。本项目与其的区别在于弹幕绘制原理。\n\n## 特性\n\n#### 高性能\n\n`canvas_danmaku` 通过底层的 `CustomPainter` 直接绘制弹幕。这可以减少 Flutter 框架中组件的数量，降低了组件树的复杂度，从而提高性能。\n\n`canvas_danmaku` 特别优化了过度重绘问题。滚动弹幕与静止弹幕分层处理，静止弹幕仅在需要时重绘。此外，当没有弹幕时，`canvas_danmaku` 会优雅地暂停所有绘制，并在重新出现弹幕时优雅地重新开始绘制。\n\n`canvas_danmaku` 渲染准备与渲染操作异步。渲染准备在弹幕添加时进行并缓存，每帧直接使用缓存而无需渲染准备。渲染缓存只在弹幕添加时生成，或在弹幕属性变动时(例如更改字体)重新生成。\n\n#### 简单\n\n`canvas_danmaku` 不依赖于上下文，不需要传递 `BuildContext`。\n\n`canvas_danmaku` 也不需要传递 弹幕容器高度/弹幕轨道数 等控制弹幕布局的信息。\n\n`canvas_danmaku` 是响应式的，弹幕容器高度会根据父组件自适应，弹幕轨道数根据当前容器高度与字体大小动态计算。\n\n`canvas_danmaku` 弹幕容器属性(字体大小/字体透明度等)可在容器运行时热更新，渲染缓存将会在发生热更新时优雅地销毁并重新生成。\n\n## 局限\n\n如前文所述，本项目绘制的弹幕本质是一段动画，而非一组小组件。故本项目绘制的弹幕不具有交互性，如果您需要点击弹幕来实现的交互操作，本项目并不能满足需求。\n\n## 致谢\n\n[xiaoyaocz/ns_danmaku](https://github.com/xiaoyaocz/flutter_ns_danmaku) 本项目的灵感来自 ns_danmaku ，一个非常优秀的项目。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpredidit%2Fcanvas_danmaku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpredidit%2Fcanvas_danmaku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpredidit%2Fcanvas_danmaku/lists"}