Flutter Demo 运行指南与下载
一个可以直接运行的 Flutter 示例 App,演示登录、会话、消息、好友、群、资料和频道等功能,可以作为接入的参考。示例使用的 SDK 版本为 1.0.0-alpha.3;示例 App 自己的版本号与 SDK 的版本号分开管理。
下载 Flutter Demo ZIP · 下载 SHA256 清单
解压后进入 deeprespond-im-flutter-demo-1.0.0-alpha.3,运行 sha256sum -c SHA256SUMS 核对包内文件。Windows 可以用 PowerShell 的 Get-FileHash -Algorithm SHA256 <ZIP 文件> 对照上面的 SHA256 清单。
获取与结构
- 下载的 ZIP:解压后在包的根目录运行,依赖从 pub.dev 安装(已去掉对仓库工作区的依赖)。
- 完整仓库:先在
sdk/flutter中执行flutter pub get,再进入example。仓库中的example依赖工作区,不要把它单独复制出去运行。 - ZIP 包含示例 App、Android / iOS / macOS / Linux 平台工程、测试和说明,不包含 SDK 源码、
local.properties、构建缓存和 IM 服务端。
| 目录 | 职责 |
|---|---|
| lib/main.dart | 客户端、入口、事件和通话路由 |
| lib/pages | 登录、会话、消息、好友、群、资料和频道 |
| lib/fixtures.dart | 测试模式:独立的临时数据目录、模拟断网和测试附件 |
| integration_test | 连接真实服务端的端到端测试和截图 |
| android、ios、macos、linux | 各平台的工程 |
环境与平台
Flutter 3.38.1 以上、Dart 3.10 以上;先运行 flutter doctor -v、flutter devices。
| 平台 | 要求与边界 |
|---|---|
| Android | Android SDK、JDK 17;模拟器和真机要分别测试 |
| iOS / macOS | 装有 Xcode 的 Mac,配置签名和权限;需要在 Mac 上实际构建测试 |
| Linux | clang、CMake、Ninja、pkg-config、GTK 3 开发库和桌面环境;IM 功能有端到端测试记录,但没有音视频(LiveKit 不支持) |
| Windows | SDK 支持 Windows 桌面,但示例没有提供 Windows 工程,要自己创建并测试,不能解压即运行 |
能看到通话入口,不代表音视频、系统来电界面或后台采集都已测试过;厂商推送需要真实设备和厂商账号。
启动
在独立包根目录,或已完成工作区安装的仓库 example 中执行:
flutter pub get
flutter devices
flutter run -d <设备ID> \
--dart-define=IM_APP_KEY='组织#应用' \
--dart-define=IM_API_URL='https://im.example.com'- 在 PowerShell 中把命令合成一行。
- 这两个参数是编译时的
--dart-define,只设置同名的环境变量不起作用;也可以在登录页修改服务地址和 AppKey。 - 默认的
http://127.0.0.1:18480和 AppKeydemo#demo只是本机的占位值。 - 在控制台中按需开启密码登录、注册、好友和音视频的策略。Client Secret、App Token 只留在服务端。
- 测试两个用户时,用两台设备,或给两个进程各用一个数据目录(不要共用),互加好友后测试;换用户前先退出。
- 麦克风、摄像头、相册、通知的授权,以及 Firebase / APNs / 厂商推送的配置,由 App 自己完成。
- 接口、附件和音视频的地址都要从设备上能访问。
本机联调
在开发机上运行一个本地的 IM 测试服务,需要完整的 IM 仓库(ZIP 中不包含服务端)。在仓库根目录执行:
make infra-up
go build -o /tmp/flutter-demo-harness ./sdk/conformance/harness
/tmp/flutter-demo-harness -env .env -addr 127.0.0.1:18480 -control 127.0.0.1:18490 \
-db im_flutter_demo -redis-prefix flutter-demo:- 端口被占用时换一个空闲的端口,并同步修改示例的配置。测试服务的
GET /env返回测试用的 AppKey;服务端凭据不要放进 App。 - 在同一台电脑上运行 Linux / macOS 版时,可以直接用
127.0.0.1。Android 上的127.0.0.1指的是设备自己,要用adb reverse转发接口、LiveKit 和对象存储的端口,或者改用设备能访问的 HTTPS 地址。 - 每台设备分别检查网络和证书。多个测试不要同时修改同一个测试应用的策略。
夹具与验证
flutter run -d linux --dart-define=IM_DEMO_FIXTURES=true测试模式(IM_DEMO_FIXTURES=true)每次使用一个新的临时数据目录,并在“我”页提供模拟断网、发送测试图片 / 文件 / 长文本的按钮。它仍然连接真实的服务,不是离线的假后端。
在完整仓库的根目录可以运行 make sdk-flutter-test 和 make sdk-flutter-integration,后者需要先启动本地的测试服务。在 sdk/flutter/example 中运行连接真实服务端、带截图的端到端测试:
IM_HARNESS=http://127.0.0.1:18490 IM_E2E_SHOTS=/tmp/flutter-demo-shots \
flutter test integration_test/e2e_test.dart -d linux \
--dart-define=IM_DEMO_FIXTURES=true --dart-define=IM_VIEWPORT=desktop没有桌面环境的 Linux 还需要 Xvfb。目前只有 Linux 上 27 个场景的测试记录(见完整仓库的 Agent测试/Flutter_SDK_Demo完善/测试报告.md),不代表其他平台或音视频也已通过。
排查
| 现象 | 检查 |
|---|---|
| 找不到工作区的根目录 | 在仓库中先对 sdk/flutter 执行 flutter pub get;单独运行请用下载的 ZIP |
| 版本不匹配 | Flutter / Dart 的版本、能否访问 pub.dev、deeprespond_* 的版本约束;不要照着旧的 2.0.0 说明操作 |
| Android 找不到 SDK | 配置你自己电脑上的路径,包中不提供 local.properties |
| Linux 上 sqlite3 不兼容 | 检查 glibc 和原生库的要求;完整仓库已配置使用系统的 SQLite,你自己的 App 按自己的系统配置 |
| 登录失败 | AppKey、账号、策略、凭证和服务地址;可以在登录页修改服务配置 |
| 图片、通话失败 | 设备能否访问返回的附件和音视频地址,端口和权限 |
| Linux 上没有通话按钮 | Linux 不支持 LiveKit,请在其他平台上测试音视频 |
| 没有 Windows 工程 | 示例没有 Windows 工程,要自己创建并测试 |
| 收不到推送 | Firebase / APNs / 厂商的配置、控制台中的凭据编号、通知权限和系统限制 |
