Tencent-RTC / Tencent-RTC/TUIKit_Flutter

【实践分享】把 UIKit 的后端整体换成无服务端 P2P(五平台,附截图);顺问新版是否为自定义数据源留了出口

未关闭
#36 0 条评论 3 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 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 里让大家迁移过来之前的版本。所以下面的经验对新版不一定成立 —— 这正是我想问你们的原因。

想问的问题

我们当时的做法是两条路径并存:

  1. 二进制替换 —— 把 SDK 加载的原生库名换成自己的实现,TIMManager → NativeLibraryManager → bindings.Dart*() 整条调用面不变;
  2. 自定义 TencentCloudChatSdkPlatform —— 历史消息、轮询、通话这些必须由 Dart 侧持有状态的能力走 Platform 路径。

之所以必须做第 1 条,是因为在旧版里,即使设置了自定义 Platform,仍有一部分能力依赖原生库加载,纯 Platform 替代不掉。另外旧版 UIKit 的公开组件是直接读 TencentCloudChat.instance.dataInstance.* 这些私有状态来渲染的,没有公开的数据注入口,我们只能直接写私有成员,再靠一层 facade 收敛住(审计清单在这里,5 个 submodule、约 35 个成员)。

新版是不是变了? 具体三个问题:

  1. 新版这套 *Store 架构,有没有公开的数据注入接口 —— 让 UI 组件从自定义数据源取数,而不是只能写内部状态?
  2. 新版还有没有类似 isCustomPlatform 的自定义 Platform 路径?如果有,它能覆盖完整调用面吗,还是仍有能力必须由原生库提供?
  3. 有没有官方推荐的「离线模式 / 自定义后端 / 纯本地 Mock 演示」做法?这三类需求其实是同一个问题的不同说法,我们只是把它推到了极端。

如果新版已经把这些考虑进去了,我们很愿意在新版上再做一遍并把结果反馈回来 —— 那对你们大概比我们这套旧版的绕法更有参考价值。

相关记录

说明

本项目 GPL-3.0,与腾讯云无隶属关系,也不代表腾讯云的任何背书。我们不重分发你们的 SDK —— 相关依赖由引导脚本在构建时按锁定版本从 pub 拉取到本地的 .gitignore 目录,仓库中不含你们的代码。

最后说句实在话:这件事能做成,本身说明这套 UI 组件的抽象是干净的 —— 把整个后端换掉之后,界面层几乎不用动。这在同类 SDK 里不常见。

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 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

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。