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

オープン
#36 コメント 0 件 リアクション 3 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
説明が足りない
活発さ
活発
技術スタック
dart, flutter

調査の方向性

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 の本文から書いたものです。

説明

先说结论

我们把 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 里不常见。

主要言語
Dart
スター
16
フォーク
18
平均マージ
1日 19分
マージ済み PR(30日)
3

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Tencent-RTC/TUIKit_Flutter のほかの issue

Tencent-RTC/TUIKit_Flutter の issue をすべて見る

似ている issue

Dart の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。