【实践分享】把 UIKit 的后端整体换成无服务端 P2P(五平台,附截图);顺问新版是否为自定义数据源留了出口
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- dart, flutter
- Lĩnh vực
- backend-api-design, frontend
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
先说结论
我们把 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 里不常见。
- Ngôn ngữ chính
- Dart
- Star
- 16
- Fork
- 18
- Merge trung bình
- 1 ngày 19 phút
- Pull request đã merge (30 ngày)
- 3
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Tencent-RTC/TUIKit_Flutter
-
Gradle and Kotlin warnings Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
Chat支持那些平台?我记得除了linux都支持。 Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 35/100
-
tuikit_atomic_x库的ios最低版本能否支持到13? Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
-
Repository is outdated! Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
Tất cả issue của Tencent-RTC/TUIKit_Flutter
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 92/100
conceptadev/noir#95 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
leancodepl/patrol#3296 ·
-
from.page-issue
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 95/100
-
bug Fundamental
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100



