Tencent-RTC / Tencent-RTC/TUIKit_Flutter
【实践分享】把 UIKit 的后端整体换成无服务端 P2P(五平台,附截图);顺问新版是否为自定义数据源留了出口
还没有人认领这个 Issue。
- 主要语言
- Dart
- 星标
- 16
- 派生
- 18
- 平均合并
- 1 天 19 分钟
- 30 天内合并 PR
- 3
描述
先说结论
我们把 Flutter chat UIKit 的界面原样保留、底下的后端整体换掉,换成了 Tox —— 一个去中心化的 P2P 协议,没有任何服务端、不需要注册账号。一套 Flutter 代码跑 Windows / macOS / Linux / Android / iOS 五个平台,各平台安装包已发布。
项目开源在 agentx-icu/toxee。
| 桌面 | iPad | Android | iOS |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
单聊、群聊、文件传输、音视频通话、好友申请、二维码名片都能用;界面一行没改。
需要说清楚的前提:我们基于的是旧版 chat-uikit-flutter 的 v2 分支,也就是那个仓库 README 里让大家迁移过来之前的版本。所以下面的经验对新版不一定成立 —— 这正是我想问你们的原因。
想问的问题
我们当时的做法是两条路径并存:
- 二进制替换 —— 把 SDK 加载的原生库名换成自己的实现,
TIMManager → NativeLibraryManager → bindings.Dart*()整条调用面不变; - 自定义
TencentCloudChatSdkPlatform—— 历史消息、轮询、通话这些必须由 Dart 侧持有状态的能力走 Platform 路径。
之所以必须做第 1 条,是因为在旧版里,即使设置了自定义 Platform,仍有一部分能力依赖原生库加载,纯 Platform 替代不掉。另外旧版 UIKit 的公开组件是直接读 TencentCloudChat.instance.dataInstance.* 这些私有状态来渲染的,没有公开的数据注入口,我们只能直接写私有成员,再靠一层 facade 收敛住(审计清单在这里,5 个 submodule、约 35 个成员)。
新版是不是变了? 具体三个问题:
- 新版这套
*Store架构,有没有公开的数据注入接口 —— 让 UI 组件从自定义数据源取数,而不是只能写内部状态? - 新版还有没有类似
isCustomPlatform的自定义 Platform 路径?如果有,它能覆盖完整调用面吗,还是仍有能力必须由原生库提供? - 有没有官方推荐的「离线模式 / 自定义后端 / 纯本地 Mock 演示」做法?这三类需求其实是同一个问题的不同说法,我们只是把它推到了极端。
如果新版已经把这些考虑进去了,我们很愿意在新版上再做一遍并把结果反馈回来 —— 那对你们大概比我们这套旧版的绕法更有参考价值。
相关记录
- FFI / ABI 层的踩坑:TencentCloud/TIMSDK#1469
- 旧版 UIKit 数据层的踩坑:TencentCloud/chat-uikit-flutter#81
- Tim2Tox(把 UIKit 接到 Tox 的兼容层,独立仓库):https://github.com/agentx-icu/tim2tox
说明
本项目 GPL-3.0,与腾讯云无隶属关系,也不代表腾讯云的任何背书。我们不重分发你们的 SDK —— 相关依赖由引导脚本在构建时按锁定版本从 pub 拉取到本地的 .gitignore 目录,仓库中不含你们的代码。
最后说句实在话:这件事能做成,本身说明这套 UI 组件的抽象是干净的 —— 把整个后端换掉之后,界面层几乎不用动。这在同类 SDK 里不常见。
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
Start with the v2 branch's TencentCloudChatSdkPlatform path, Store architecture, and the TIMManager → NativeLibraryManager → bindings.Dart() call chain mentioned in the issue. Compare these entry points with the linked Toxee UIKIT_PRIVATE_API audit. Done means documenting whether public data injection exists, how completely custom Platform paths are supported, and what offline or custom-backend approach is recommended.
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- dart, flutter
- 领域
- backend-api-design, frontend
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 活跃
- 描述清晰度
- 需要澄清
- 新手友好度
- 25/100



