@tencentcloud/sdk-mcp 1.3.4 → 1.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/index.js +4 -4
  2. package/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/resource/doc/chatuikit/android/features/theme.md +363 -0
  5. package/resource/doc/chatuikit/{android/client_api_android.md → faq/android_sdk/client-api.md} +0 -1
  6. package/resource/doc/chatuikit/faq/{native_sdk/faq.md → common/product.md} +8 -0
  7. package/resource/doc/chatuikit/faq/flutter_sdk/faq.md +54 -0
  8. package/resource/doc/chatuikit/faq/web_sdk/faq.md +1 -1
  9. package/resource/doc/chatuikit/flutter/features/theme.md +379 -0
  10. package/resource/doc/chatuikit/flutter/workflow.md +816 -0
  11. package/resource/doc/chatuikit/iOS/features/theme.md +416 -0
  12. package/resource/doc/chatuikit/iOS/workflow.md +0 -0
  13. package/resource/doc/chatuikit/react/components/chat-setting.md +124 -0
  14. package/resource/doc/chatuikit/react/components/contact-list.md +1331 -0
  15. package/resource/doc/chatuikit/react/components/search.md +885 -0
  16. package/resource/doc/chatuikit/vue/components/chat-setting.md +88 -0
  17. package/resource/doc/chatuikit/vue/components/contact-list.md +679 -0
  18. package/resource/doc/chatuikit/vue/components/search.md +1384 -0
  19. package/resource/doc/livekit/live/android/workflow.md +137 -4
  20. package/resource/doc/livekit/live/flutter/live-audience-list.md +337 -0
  21. package/resource/doc/livekit/live/flutter/live-audio-effect.md +739 -0
  22. package/resource/doc/livekit/live/flutter/live-barrage.md +578 -0
  23. package/resource/doc/livekit/live/flutter/live-base-beauty.md +484 -0
  24. package/resource/doc/livekit/live/flutter/live-co-guest-interaction.md +606 -0
  25. package/resource/doc/livekit/live/flutter/live-gift.md +812 -0
  26. package/resource/doc/livekit/live/flutter/live-host-interaction.md +1113 -0
  27. package/resource/doc/livekit/live/flutter/live-integration.md +1029 -0
  28. package/resource/doc/livekit/live/flutter/live-live-list.md +861 -0
  29. package/resource/doc/livekit/live/ios/live-audience-list.md +335 -0
  30. package/resource/doc/livekit/live/ios/live-audio-effect.md +373 -0
  31. package/resource/doc/livekit/live/ios/live-barrage.md +529 -0
  32. package/resource/doc/livekit/live/ios/live-base-beauty.md +237 -0
  33. package/resource/doc/livekit/live/ios/live-co-guest-interaction.md +483 -0
  34. package/resource/doc/livekit/live/ios/live-gift.md +785 -0
  35. package/resource/doc/livekit/live/ios/live-host-interaction.md +743 -0
  36. package/resource/doc/livekit/live/ios/live-integration.md +822 -0
  37. package/resource/doc/livekit/live/ios/live-live-list.md +535 -0
  38. package/resource/doc/livekit/live/ios/workflow.md +352 -0
  39. package/resource/doc/rtcengine/faq/web/web.md +2 -2
  40. package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +2 -2
  41. package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +84 -0
  42. package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +86 -0
  43. package/resource/doc/rtcengine/web/plugin/22-advanced-audio-mixer.md +220 -0
  44. package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +217 -0
  45. package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +137 -0
  46. package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +97 -0
  47. package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +453 -0
  48. package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +180 -0
  49. package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +349 -0
  50. package/resource/doc/rtcengine/web/plugin/29-advanced-water-mark.md +149 -0
  51. package/resource/doc/rtcengine/web/plugin/30-advanced-cross-room-link.md +96 -0
  52. package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +405 -0
  53. package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +244 -0
  54. package/resource/doc/rtcengine/web/plugin/35-advanced-ai-denoiser.md +84 -0
  55. package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +202 -0
  56. package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +98 -0
  57. package/resource/doc/rtcengine/web/plugin/38-advanced-basic-beauty.md +95 -0
  58. package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +33 -0
  59. package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +380 -0
  60. package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +91 -0
  61. package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +314 -0
  62. package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +180 -0
  63. package/resource/doc/tuicallkit/android/workflow.md +0 -0
  64. package/resource/doc/tuicallkit/flutter/integration.md +510 -0
  65. package/resource/doc/tuicallkit/flutter/workflow.md +331 -0
  66. package/tools/call/get-native-call-integration.js +27 -11
  67. package/tools/call/get-native-call-integration.js.map +1 -1
  68. package/tools/chat/get-native-chat-feature-detail.js +30 -0
  69. package/tools/chat/get-native-chat-feature-detail.js.map +1 -0
  70. package/tools/chat/get-native-chat-integration.js +30 -12
  71. package/tools/chat/get-native-chat-integration.js.map +1 -1
  72. package/tools/common/get-faq.js +2 -4
  73. package/tools/common/get-faq.js.map +1 -1
  74. package/tools/definitions/get_native_call_uikit_integration_def.js +16 -6
  75. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  76. package/tools/definitions/get_native_chat_feature_detail_def.js +32 -0
  77. package/tools/definitions/get_native_chat_feature_detail_def.js.map +1 -0
  78. package/tools/definitions/get_native_chat_uikit_integration_def.js +18 -6
  79. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
  80. package/tools/definitions/{get_native_live_extra_features_def.js → get_native_live_uikit_extra_features_def.js} +3 -3
  81. package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +1 -0
  82. package/tools/definitions/{get_native_live_interaction_def.js → get_native_live_uikit_interaction_def.js} +3 -3
  83. package/tools/definitions/get_native_live_uikit_interaction_def.js.map +1 -0
  84. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +46 -7
  85. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
  86. package/tools/index.js +6 -4
  87. package/tools/index.js.map +1 -1
  88. package/tools/live/{get_native_live_extra_features.js → get_native_live_uikit_extra_features.js} +4 -4
  89. package/tools/live/get_native_live_uikit_extra_features.js.map +1 -0
  90. package/tools/live/{get_native_live_interaction.js → get_native_live_uikit_interaction.js} +4 -4
  91. package/tools/live/get_native_live_uikit_interaction.js.map +1 -0
  92. package/tools/rtcengine/get-trtc-web-sdk-faq.js +1 -1
  93. package/tools/rtcengine/get-trtc-web-sdk-plugin.js +45 -0
  94. package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +1 -0
  95. package/utils/handle-component-name.js +0 -16
  96. package/utils/handle-component-name.js.map +1 -1
  97. package/utils/report-cls-client.js +1 -1
  98. package/utils/report-es-client.js +1 -1
  99. package/resource/doc/chatuikit/android/integrate_tuichat_only_android.md +0 -382
  100. package/resource/doc/chatuikit/android/ui_api_android.md +0 -418
  101. package/resource/doc/chatuikit/iOS/integrate_tuichat_only_iOS.md +0 -993
  102. package/resource/doc/chatuikit/iOS/ui_api_iOS.md +0 -526
  103. package/resource/doc/tuicallkit/flutter/how_to_integrated_flutter_callkit.md +0 -226
  104. package/resource/doc/tuicallkit/flutter/how_to_run_flutter_callkit_demo.md +0 -101
  105. package/resource/doc/tuicallkit/iOS/how_to_run_iOS_callkit_demo.md +0 -98
  106. package/tools/definitions/get_native_live_extra_features_def.js.map +0 -1
  107. package/tools/definitions/get_native_live_interaction_def.js.map +0 -1
  108. package/tools/live/get_native_live_extra_features.js.map +0 -1
  109. package/tools/live/get_native_live_interaction.js.map +0 -1
  110. /package/resource/doc/chatuikit/android/{integrate_tuikit_android.md → integration.md} +0 -0
  111. /package/resource/doc/{tuicallkit/android/.gitkeep → chatuikit/android/workflow.md} +0 -0
  112. /package/resource/doc/chatuikit/{flutter/client_api_Flutter.md → faq/flutter_sdk/client-api.md} +0 -0
  113. /package/resource/doc/chatuikit/{iOS/client_api_iOS.md → faq/ios_sdk/client-api.md} +0 -0
  114. /package/resource/doc/chatuikit/flutter/{integrate_tuikit_Flutter.md → integration.md} +0 -0
  115. /package/resource/doc/chatuikit/iOS/{integrate_tuikit_iOS.md → integration.md} +0 -0
  116. /package/resource/doc/chatuikit/react/components/{chatheader.md → chat-header.md} +0 -0
  117. /package/resource/doc/chatuikit/vue/components/{chatheader.md → chat-header.md} +0 -0
  118. /package/resource/doc/tuicallkit/android/{how_to_integrated_android_callkit.md → integration.md} +0 -0
  119. /package/resource/doc/tuicallkit/{android/api_TUICallObserver.md → faq/android_sdk/call-observer-api.md} +0 -0
  120. /package/resource/doc/tuicallkit/{android/api_TUICallKit.md → faq/android_sdk/callkit-api.md} +0 -0
  121. /package/resource/doc/tuicallkit/{flutter/api_TUICallDefine.md → faq/flutter_sdk/call-define-api.md} +0 -0
  122. /package/resource/doc/tuicallkit/{flutter/api_TUICallObserver.md → faq/flutter_sdk/call-observer-api.md} +0 -0
  123. /package/resource/doc/tuicallkit/{flutter/api_TUICallKit.md → faq/flutter_sdk/callkit-api.md} +0 -0
  124. /package/resource/doc/tuicallkit/{iOS/api_TUICallObserver.md → faq/ios_sdk/call-observer-api.md} +0 -0
  125. /package/resource/doc/tuicallkit/{iOS/api_TUICallKit.md → faq/ios_sdk/callkit-api.md} +0 -0
  126. /package/resource/doc/tuicallkit/iOS/{how_to_integrated_iOS_callkit.md → integration.md} +0 -0
@@ -0,0 +1,816 @@
1
+ # Flutter TUIKit 聊天应用代码生成工作流指令
2
+
3
+ ## 📋 指令目的
4
+
5
+ 为 Agent 提供实现 Flutter TUIKit Chat **核心功能的代码生成蓝图**,并指导 Agent **优先使用工具实时获取的最新文档内容**,专门针对 Flutter 即时通信聊天应用场景。
6
+
7
+ ---
8
+
9
+ ## 🛑 Agent 执行硬性限制 (Guardrails)
10
+
11
+ Agent 在生成代码时必须严格遵守以下指令:
12
+
13
+ ### 0. 🚨 核心页面代码来源(最高优先级)
14
+ **这是最容易违反的约束,必须放在首位强调!**
15
+
16
+ **绝对禁止行为**:
17
+ - ❌ **严禁自己编写任何核心页面代码**(ConversationsPage、ChatPage、ContactsPage)
18
+ - ❌ **严禁简化实现**,例如只写几十行代码的"简化版"页面
19
+ - ❌ **严禁跳过页面代码生成**,直接让用户"参考官方示例"
20
+
21
+ **强制执行要求**:
22
+ - ✅ **必须直接使用以下官方页面文件**:
23
+ - `TUIKit_Flutter/chat/uikit/lib/conversations_page.dart`
24
+ - `TUIKit_Flutter/chat/uikit/lib/chat_page.dart`
25
+ - `TUIKit_Flutter/chat/uikit/lib/contacts_page.dart`
26
+ - ✅ **必须从 `TUIKit_Flutter/chat/uikit/lib/` 目录完整复制上述文件**
27
+ - ✅ **必须包含完整的 State 类、UI 组件树、业务逻辑**
28
+ - ✅ **必须复制所有依赖的组件和工具类**,保持文件结构完整
29
+
30
+ **验证标准**:生成的核心页面代码应与官方源码一致,功能完整
31
+
32
+ ### 1. 文档驱动集成
33
+ - 必须严格按照工具返回结果中的 `llm_code_generation_instructions_md` 步骤执行
34
+ - **必须严格按照集成文档中的示例代码生成代码**,不得擅自修改代码结构和实现方式
35
+ - 代码生成时应完全遵循集成文档提供的最佳实践和示例,确保代码的正确性和可运行性
36
+
37
+ ### 2. 源码接入方式
38
+ - TUIKit Flutter 采用 **源码接入方式**,需要从 GitHub 克隆并拷贝核心源码文件
39
+ - **必须将源码克隆到用户项目的根目录下**(即 `项目根目录/TUIKit_Flutter/`)
40
+ - 必须按照集成文档指引,将指定的源码文件夹(`atomic-x`、`chat/uikit`)拷贝到用户项目中
41
+ - 拷贝时必须确保与用户项目已有的文件夹进行合并,避免直接覆盖
42
+
43
+ ### 3. 静默执行集成
44
+ - 所有代码编写完成后,在最后一步自动安装依赖并启动项目
45
+ - **Flutter 命令执行策略(多级降级,确保成功)**:
46
+ 1. **第一优先级**:尝试直接执行 `flutter pub get`
47
+ 2. **第二优先级**:如果失败,使用 `which flutter` 获取完整路径后执行
48
+ 3. **第三优先级**:如果仍失败,尝试常见路径:
49
+ - macOS/Linux: `$HOME/flutter/bin/flutter`
50
+ - macOS (Homebrew): `/opt/homebrew/bin/flutter`
51
+ 4. **最终降级**:如果全部失败,**引导用户手动执行**(见下方指引)
52
+ - 启动成功后提示用户在模拟器或真机中运行应用
53
+
54
+ #### 📋 手动执行依赖安装指引
55
+
56
+ **当自动执行 `flutter pub get` 失败时,请引导用户按以下步骤操作**:
57
+
58
+ **步骤 1: 打开终端并切换到项目目录**
59
+ ```bash
60
+ cd /path/to/your/project # 替换为实际项目路径
61
+ ```
62
+
63
+ **步骤 2: 手动安装 Flutter 依赖**
64
+ ```bash
65
+ flutter pub get
66
+ ```
67
+
68
+ **步骤 3: (iOS 项目) 安装 CocoaPods 依赖**
69
+ ```bash
70
+ cd ios
71
+ pod install
72
+ cd ..
73
+ ```
74
+
75
+ **步骤 4: 验证依赖安装**
76
+ ```bash
77
+ flutter doctor -v # 检查 Flutter 环境
78
+ flutter pub deps # 查看依赖树
79
+ ```
80
+
81
+ **步骤 5: 启动项目**
82
+ ```bash
83
+ # 方式 1: 使用模拟器/真机
84
+ flutter run
85
+
86
+ # 方式 2: 指定设备
87
+ flutter devices # 列出可用设备
88
+ flutter run -d <device-id> # 指定设备运行
89
+ ```
90
+
91
+ **💡 常见问题排查**
92
+
93
+ | 错误现象 | 可能原因 | 解决方案 |
94
+ |---------|---------|---------|
95
+ | `bash: flutter: command not found` | Flutter 未添加到 PATH | 运行 `export PATH="$PATH:$HOME/flutter/bin"` 或参考 [Flutter 安装文档](https://docs.flutter.dev/get-started/install) |
96
+ | `Error: Cannot find package` | pubspec.yaml 配置错误 | 检查依赖路径是否正确(`tuikit_atomic_x` 应指向 `TUIKit_Flutter/atomic-x`) |
97
+ | `CocoaPods not installed` | iOS 缺少 CocoaPods | 运行 `sudo gem install cocoapods` |
98
+ | `version solving failed` | 依赖版本冲突 | 运行 `flutter pub upgrade` 或使用 `dependency_overrides` |
99
+
100
+ **⚠️ 提示用户**:
101
+ 1. 确保 Flutter 环境已正确安装(运行 `flutter doctor` 检查)
102
+ 2. 确保网络可访问 `pub.dev` 和 `github.com`
103
+ 3. 如果在中国大陆,建议配置镜像:
104
+ ```bash
105
+ export PUB_HOSTED_URL=https://pub.flutter-io.cn
106
+ export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
107
+ ```
108
+
109
+ ### 4. 鉴权凭据配置(重要)
110
+ - **必须调用 `get_usersig` 工具获取测试用的 SDKAppID、UserID、UserSig**
111
+ - UserID 格式:`userXXX`(XXX 为数字),例如 `user123`
112
+ - 测试阶段可在代码中硬编码鉴权信息,但必须在注释中明确标注仅用于测试
113
+ - **禁止创建 `.env` 文件**用于生产环境配置
114
+ - **⚠️ 安全警告**:必须告知用户,客户端生成 UserSig 仅适合本地测试,正式生产环境必须在服务端生成 UserSig
115
+
116
+ ### 5. LoginPage 实现约束 🔴
117
+ - **必须参考 `TUIKit_Flutter/chat/demo/lib/login_page.dart` 实现登录页面**(注意路径前缀)
118
+ - **SDKAppID、UserID、UserSig 必须直接使用 `get_usersig` 工具返回的信息**
119
+ - **禁止在 UI 中添加 UserID 输入框**,不允许用户主动输入 UserID
120
+ - **禁止在 UI 中添加 SDKAppID 和 UserSig 输入框**
121
+ - **登录接口必须调用 `LoginStore.shared.login`**,传入从 `get_usersig` 获取的完整凭证
122
+ - 登录成功后自动跳转到主页面(ConversationsPage 或 ChatPage)
123
+
124
+ ### 6. chat-only 模式功能限制(⚠️ 默认约束 + 用户主动要求时的例外)
125
+
126
+ **默认行为**:
127
+ 当用户选择 chat-only 模式时,Agent **默认排除**以下扩展功能:
128
+ - **默认不集成 ConversationsPage**(会话列表页面)
129
+ - **默认不集成 ContactsPage**(联系人页面)
130
+ - **默认仅保留核心聊天页面**:`ChatPage`
131
+
132
+ **例外处理**:
133
+ 如果用户**明确要求**添加某些扩展功能(如"需要 ConversationsPage"、"要集成联系人"等),Agent **应该允许并执行**:
134
+ - ✅ 在核心聊天页面基础上,额外集成用户明确要求的功能
135
+ - ✅ 只添加用户明确要求的功能,不擅自扩展其他功能
136
+ - ✅ 按照集成文档的规范正确集成所需页面
137
+
138
+ **判断标准**:
139
+ - 用户需求中包含明确的功能关键词(如"ConversationsPage"、"联系人"、"搜索"、"会话列表"等)
140
+ - 用户明确说明需要某个扩展功能
141
+
142
+ ### 7. 包名导入约束 🔴
143
+ - **正确的包名是 `package:tuikit_atomic_x/atomicx.dart`**
144
+ - **禁止使用以下错误的包名**:
145
+ - ❌ `package:tuikit_atomic_x/tuikit_atomicx.dart`
146
+ - ❌ `package:tuikit_atomic_x/tuikit_atomic_x.dart`
147
+ - **禁止自己推测包名**,必须严格按照集成文档中的示例代码使用
148
+ - 所有 import 语句必须使用正确的包名路径
149
+
150
+ ### 8. Flutter 项目规范
151
+ - 使用 Flutter >= 3.29.0、Dart >= 3.7.0、Kotlin >= 1.9 版本
152
+ - 遵循 Flutter 官方代码风格和最佳实践
153
+ - 按照集成文档配置 Android 和 iOS 平台的权限和依赖
154
+ - **必须配置国际化和 LocaleProvider**(强制要求):
155
+
156
+ **完整的 Widget 树结构示例**:
157
+ ```dart
158
+ import 'package:flutter/material.dart';
159
+ import 'package:flutter_localizations/flutter_localizations.dart';
160
+ import 'package:provider/provider.dart';
161
+ import 'package:tuikit_atomic_x/atomicx.dart';
162
+
163
+ class MyApp extends StatelessWidget {
164
+ const MyApp({super.key});
165
+
166
+ @override
167
+ Widget build(BuildContext context) {
168
+ return ComponentTheme(
169
+ child: MultiProvider(
170
+ providers: [
171
+ ChangeNotifierProvider.value(value: LocaleProvider()), // 注册 LocaleProvider
172
+ ],
173
+ child: Builder(
174
+ builder: (context) {
175
+ final localeProvider = Provider.of<LocaleProvider>(context);
176
+
177
+ return MaterialApp(
178
+ title: 'TUIKit Flutter Demo',
179
+ theme: ThemeData(
180
+ colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
181
+ useMaterial3: true,
182
+ ),
183
+ localizationsDelegates: const [
184
+ AtomicLocalizations.delegate, // TUIKit 国际化(必须)
185
+ GlobalMaterialLocalizations.delegate, // Material 组件国际化
186
+ GlobalWidgetsLocalizations.delegate, // Widget 国际化
187
+ GlobalCupertinoLocalizations.delegate, // iOS 风格组件国际化
188
+ ],
189
+ supportedLocales: AtomicLocalizations.supportedLocales, // 使用 TUIKit 支持的语言
190
+ locale: localeProvider.locale, // 绑定当前语言
191
+ home: const LoginPage(), // 替换为你的首页 Widget(如 HomePage、LoginScreen 等)
192
+ );
193
+ },
194
+ ),
195
+ ),
196
+ );
197
+ }
198
+ }
199
+ ```
200
+
201
+ **pubspec.yaml 必须添加依赖**:
202
+ ```yaml
203
+ dependencies:
204
+ flutter_localizations:
205
+ sdk: flutter
206
+ provider: ^6.0.0 # 或最新版本
207
+ ```
208
+
209
+ **Widget 树结构要求**(从外到内):
210
+ ```
211
+ ComponentTheme ← 最外层(TUIKit 主题组件)
212
+ └─ MultiProvider ← Provider 容器
213
+ └─ providers: [LocaleProvider] ← 注册 LocaleProvider
214
+ └─ Builder ← 用于获取 context
215
+ └─ MaterialApp ← 应用入口
216
+ ├─ localizationsDelegates ← 国际化委托
217
+ │ ├─ AtomicLocalizations.delegate (TUIKit 国际化,必须)
218
+ │ ├─ GlobalMaterialLocalizations.delegate
219
+ │ ├─ GlobalWidgetsLocalizations.delegate
220
+ │ └─ GlobalCupertinoLocalizations.delegate
221
+ ├─ supportedLocales ← AtomicLocalizations.supportedLocales
222
+ ├─ locale ← localeProvider.locale(绑定语言)
223
+ └─ home: YourHomePage ← 首页(根据实际情况替换)
224
+ ```
225
+
226
+ **⚠️ 关键要点**:
227
+ 1. **ComponentTheme 必须在最外层**(包裹 MultiProvider)
228
+ 2. **必须添加 AtomicLocalizations.delegate**(TUIKit 国际化委托)
229
+ 3. **supportedLocales 使用 `AtomicLocalizations.supportedLocales`**(而非手动指定)
230
+ 4. **使用 Builder + Provider.of 获取 LocaleProvider**(实现语言切换)
231
+ 5. **使用 `ChangeNotifierProvider.value(value: LocaleProvider())`**(单例模式)
232
+ 6. **添加 `const` 构造函数和常量 Widget**(性能优化)
233
+ 7. **`home` 参数根据实际需求调整**(见下方说明)
234
+
235
+ **📱 `home` 参数使用场景**:
236
+
237
+ | 场景 | 推荐的 `home` Widget | 说明 |
238
+ |-----|-------------------|------|
239
+ | 需要登录 | `const LoginPage()` 或 `const LoginScreen()` | 未登录用户先进入登录页 |
240
+ | 已登录用户 | `const HomePage()` | 直接进入主页(包含 TabBar) |
241
+ | 调试测试 | `const ChatPage(conversationID: 'test')` | 直接进入某个聊天页面 |
242
+ | 引导页 | `const OnboardingPage()` | 首次使用显示引导 |
243
+
244
+ **💡 常见实现方式**:
245
+
246
+ ```dart
247
+ // 方式 1: 根据登录状态动态选择首页
248
+ home: _isLoggedIn ? const HomePage() : const LoginPage(),
249
+
250
+ // 方式 2: 使用路由守卫(推荐)
251
+ initialRoute: '/',
252
+ routes: {
253
+ '/': (context) => const SplashPage(), // 启动页判断状态
254
+ '/login': (context) => const LoginPage(), // 登录页
255
+ '/home': (context) => const HomePage(), // 主页
256
+ },
257
+ ```
258
+
259
+ ### 9. 环境依赖准备
260
+ - 确保用户已安装 Flutter SDK、Android Studio 和 Xcode(macOS)
261
+ - **Flutter 命令执行遵循第 3 节的多级降级策略**
262
+ - iOS 平台需要额外执行 `cd ios && pod install && cd ..` 安装 Pods 依赖
263
+ - **如果自动执行失败,必须生成降级脚本供用户手动执行**
264
+
265
+ ---
266
+
267
+ ## 🛠️ 集成模式分发 (Goals)
268
+
269
+ 根据用户的需求,Agent 必须选择对应的执行路径:
270
+
271
+ ### 1. 全量功能集成 (full-featured)
272
+
273
+ **目标**: 实现类似微信的完整 IM 应用
274
+
275
+ **核心页面**:
276
+ - `ConversationsPage` (会话列表)
277
+ - `ChatPage` (聊天页面)
278
+ - `ContactsPage` (联系人)
279
+
280
+ **执行参考**:
281
+ - 参考工具返回结果中实时获取的 `integration.md` 指令
282
+
283
+ **适用场景**:
284
+ - 构建独立的聊天应用
285
+ - 需要完整的会话管理、通讯录、群组管理功能
286
+ - 作为移动应用的核心功能模块
287
+
288
+ **HomePage 和 TabBar 实现要求**(🔴 强制要求):
289
+
290
+ 如果项目中没有 TabBar 导航,**必须创建 HomePage 作为主页面**,包含以下要求:
291
+
292
+ 1. **必须实现底部 TabBar**:
293
+ - 默认包含两个 Tab:**聊天**(ConversationsPage)和 **联系人**(ContactsPage)
294
+ - 使用 Flutter 的 `BottomNavigationBar` 或 `TabBar` 组件
295
+
296
+ 2. **Tab 点击必须能跳转到真实页面**:
297
+ - 点击"聊天" Tab → 显示 `ConversationsPage`(会话列表)
298
+ - 点击"联系人" Tab → 显示 `ContactsPage`(联系人列表)
299
+ - 使用 `PageView`、`IndexedStack` 或路由切换实现页面切换
300
+
301
+ 3. **HomePage 结构示例**:
302
+ ```dart
303
+ import 'package:flutter/material.dart';
304
+ import 'package:tuikit_atomic_x/atomicx.dart';
305
+
306
+ class HomePage extends StatefulWidget {
307
+ @override
308
+ _HomePageState createState() => _HomePageState();
309
+ }
310
+
311
+ class _HomePageState extends State<HomePage> {
312
+ int _selectedIndex = 0;
313
+
314
+ final List<Widget> _pages = [
315
+ ConversationsPage(), // 会话列表
316
+ ContactsPage(), // 联系人
317
+ ];
318
+
319
+ void _onItemTapped(int index) {
320
+ setState(() {
321
+ _selectedIndex = index;
322
+ });
323
+ }
324
+
325
+ @override
326
+ Widget build(BuildContext context) {
327
+ return Scaffold(
328
+ body: IndexedStack(
329
+ index: _selectedIndex,
330
+ children: _pages,
331
+ ),
332
+ bottomNavigationBar: BottomNavigationBar(
333
+ items: [
334
+ BottomNavigationBarItem(
335
+ icon: Icon(Icons.chat_bubble_outline),
336
+ activeIcon: Icon(Icons.chat_bubble),
337
+ label: atomicLocale.chat,
338
+ ),
339
+ BottomNavigationBarItem(
340
+ icon: Icon(Icons.contacts_outlined),
341
+ activeIcon: Icon(Icons.contacts),
342
+ label: atomicLocale.contact,
343
+ ),
344
+ ],
345
+ currentIndex: _selectedIndex,
346
+ onTap: _onItemTapped,
347
+ ),
348
+ );
349
+ }
350
+ }
351
+ ```
352
+
353
+ **⚠️ TabBar label 国际化要求**:
354
+ - **必须使用 `atomicLocale` 读取 Tab 标签文本**
355
+ - ❌ 禁止硬编码中文或英文文本(如 `'聊天'`、`'Chat'`)
356
+ - ✅ 正确用法:
357
+ - 聊天 Tab:`label: atomicLocale.chat`
358
+ - 联系人 Tab:`label: atomicLocale.contact`
359
+ - `atomicLocale` 会根据当前语言环境自动返回对应的翻译文本
360
+
361
+ **💡 TabBar 最佳实践**:
362
+ - 使用 `icon` 和 `activeIcon` 区分选中/未选中状态(提升视觉体验)
363
+ - 使用语义化的图标:
364
+ - 聊天:`Icons.chat_bubble_outline` / `Icons.chat_bubble`
365
+ - 联系人:`Icons.contacts_outlined` / `Icons.contacts`
366
+ - 将 `onTap` 逻辑提取为独立方法 `_onItemTapped`(提高代码可读性)
367
+ - 变量名使用 `_selectedIndex` 比 `_currentIndex` 更语义化
368
+
369
+ 4. **登录成功后跳转到 HomePage**:
370
+ ```dart
371
+ // LoginPage.dart
372
+ await LoginStore.shared.login(...);
373
+ Navigator.pushReplacement(
374
+ context,
375
+ MaterialPageRoute(builder: (_) => HomePage()), // 跳转到 HomePage
376
+ );
377
+ ```
378
+
379
+ 5. **禁止行为**:
380
+ - ❌ 登录后直接跳转到单个页面(如 ConversationsPage)而没有 TabBar
381
+ - ❌ 创建空的 HomePage 但没有实际的页面切换逻辑
382
+ - ❌ TabBar 只有一个 Tab(必须至少有"聊天"和"联系人")
383
+
384
+ ---
385
+
386
+ ### 2. 仅集成聊天页面 (chat-only)
387
+
388
+ **目标**: 适用于客服、问诊、详情页私聊等纯对话场景
389
+
390
+ **核心页面**:
391
+ - `ChatPage` (聊天页面)
392
+
393
+ **执行参考**:
394
+ - 参考工具返回结果中实时获取的 `integration.md` 指令
395
+
396
+ **适用场景**:
397
+ - 客服咨询场景(用户点击咨询按钮进入聊天页面)
398
+ - 医疗在线问诊(患者与医生一对一沟通)
399
+ - 订单详情页私聊(买家与卖家沟通)
400
+ - 社交应用中的私信功能
401
+
402
+ **💡 登录成功后的页面跳转(chat-only 模式指引)**:
403
+
404
+ **默认行为**:如果用户没有特别说明,登录成功后直接跳转到 `ChatPage`,打开与 `administrator` 的单聊会话。
405
+
406
+ **灵活调整**:如果用户有其他诉求(如特定时机打开聊天页、指定其他会话对象),需按用户引导确认跳转时机和目标会话。
407
+
408
+ **默认实现示例**:
409
+
410
+ ```dart
411
+ // ✅ 登录成功,直接进入聊天页面
412
+ Navigator.pushReplacement(
413
+ context,
414
+ MaterialPageRoute(
415
+ builder: (context) => const ChatPage(
416
+ conversationID: 'c2c_administrator', // 默认与 administrator 单聊
417
+ ),
418
+ ),
419
+ );
420
+ ```
421
+
422
+ **⚠️ 关键要点**:
423
+ 1. **使用 `Navigator.pushReplacement`**(替换登录页,防止返回)
424
+ 2. **conversationID 格式**:单聊 `'c2c_<userID>'`,群聊 `'group_<groupID>'`
425
+ 3. **默认会话 ID**:`'c2c_administrator'`(可根据用户需求调整为其他 userID 或 groupID)
426
+ 4. **跳转时机**:默认在登录成功回调中立即跳转,如用户有特殊需求(如点击按钮后跳转),需按用户指引调整
427
+
428
+ **🔴 默认排除功能(Agent 必须遵守)**:
429
+
430
+ Agent 在生成 chat-only 模式代码时,**默认排除**以下功能和页面:
431
+
432
+ 1. **默认不集成 ConversationsPage(会话列表)**
433
+ - 默认不生成会话列表页面
434
+ - 默认不引入会话切换功能
435
+ - 聊天页面默认应该是独立的、直达的纯聊天界面
436
+
437
+ 2. **默认不集成 ContactsPage(联系人)**
438
+ - 默认不生成通讯录页面
439
+ - 默认不引入联系人管理功能
440
+
441
+ 3. **默认不集成底部导航栏(TabBar)**
442
+ - chat-only 模式下,用户通过外部路由/参数指定会话 ID
443
+ - 默认不需要页面切换功能
444
+
445
+ ---
446
+
447
+ **⚠️ 用户主动要求时的例外处理**:
448
+
449
+ 如果用户在 chat-only 模式下**明确要求**添加某些扩展功能,Agent **应该允许并执行**:
450
+
451
+ **触发条件**(满足任一即可):
452
+ - 用户明确说明:"需要 ConversationsPage"、"要集成会话列表"、"添加会话切换功能"
453
+ - 用户明确说明:"需要 ContactsPage"、"要添加联系人"、"集成通讯录"
454
+ - 用户明确提出其他扩展功能需求
455
+
456
+ **Agent 执行流程**:
457
+ 1. ✅ **确认用户需求**:识别到用户主动要求添加扩展功能
458
+ 2. ✅ **允许集成**:在 chat-only 模式基础上,额外集成用户要求的页面
459
+ 3. ✅ **保持克制**:只添加用户明确要求的功能,不擅自扩展其他功能
460
+ 4. ✅ **遵循文档**:按照集成文档的规范正确集成所需页面
461
+
462
+ ---
463
+
464
+ ## 📦 核心版本要求
465
+
466
+ | 工具/平台 | 最低版本要求 |
467
+ |----------|-------------|
468
+ | **Flutter** | >= 3.29.0 |
469
+ | **Dart** | >= 3.7.0 |
470
+ | **Kotlin** | >= 1.9 |
471
+ | **Android Studio** | Ladybug \| 2024.2.1 及以上 |
472
+ | **Android Gradle Plugin** | >= 7.3.1 |
473
+ | **JDK** | 17 |
474
+ | **Xcode** | >= 12.0(macOS) |
475
+
476
+ ---
477
+
478
+ ## 📦 安装命令示例
479
+ Agent 执行完成代码生成后,必须按顺序执行以下命令:
480
+
481
+ **⚠️ 重要:Flutter 命令执行规范**
482
+ - 必须使用 `which flutter` 获取 Flutter 实际安装路径
483
+ - 使用完整路径执行命令,避免环境变量问题
484
+ - 确保在用户项目目录下执行
485
+
486
+ ```bash
487
+ # 0. 获取 Flutter 实际路径(必须先执行)
488
+ FLUTTER_PATH=$(which flutter)
489
+
490
+ # 1. 清理项目
491
+ $FLUTTER_PATH clean
492
+
493
+ # 2. 获取依赖
494
+ $FLUTTER_PATH pub get
495
+
496
+ # 3. iOS 依赖安装(仅 macOS)
497
+ cd ios && pod install && cd ..
498
+
499
+ # 4. 运行项目(选择设备或模拟器)
500
+ $FLUTTER_PATH run
501
+ ```
502
+
503
+ **命令执行策略**:
504
+ - 优先使用 `which flutter` 获取的完整路径
505
+ - 如果 `which flutter` 失败,尝试常见路径:
506
+ - macOS/Linux: `$HOME/flutter/bin/flutter`
507
+ - 用户自定义路径(从环境变量 `FLUTTER_ROOT` 读取)
508
+ - 如果所有路径都失败,提示用户检查 Flutter 安装
509
+
510
+ ---
511
+
512
+ ## 📱 真机调试引导
513
+
514
+ ### iOS 真机调试步骤
515
+
516
+ #### 1. 硬件准备
517
+ - 使用 USB 数据线连接 iPhone/iPad 到 Mac
518
+ - 确保设备已解锁并信任此电脑(首次连接会弹出提示)
519
+
520
+ #### 2. 配置开发者账号
521
+
522
+ **⚠️ 重要:正确打开 iOS 项目**
523
+
524
+ 使用 Xcode 打开 iOS 项目时,**必须**打开 `Runner.xcworkspace` 文件(而非 `Runner.xcodeproj`):
525
+
526
+ ```bash
527
+ open ios/Runner.xcworkspace
528
+ ```
529
+
530
+ **❌ 常见错误**:
531
+ - 不要打开 `ios/Runner.xcodeproj`(会导致 CocoaPods 依赖无法识别)
532
+ - 不要直接双击 `ios` 文件夹
533
+
534
+ **✅ 正确做法**:
535
+ - 在终端执行 `open ios/Runner.xcworkspace`
536
+ - 或在 Finder 中找到 `ios/Runner.xcworkspace`,双击打开
537
+
538
+ **配置签名**:
539
+
540
+ 在 Xcode 中:
541
+ - 选择 **Runner** 项目 → **Signing & Capabilities**
542
+ - 勾选 **Automatically manage signing**
543
+ - 选择你的 **Apple ID**(Team)
544
+ - 修改 **Bundle Identifier**(必须唯一,建议格式:`com.yourname.appname`)
545
+
546
+ #### 3. 查看已连接设备
547
+ ```bash
548
+ FLUTTER_PATH=$(which flutter)
549
+ $FLUTTER_PATH devices
550
+ ```
551
+
552
+ 输出示例:
553
+ ```
554
+ iPhone 15 Pro (mobile) • 00008110-XXXXX • ios • iOS 17.2
555
+ ```
556
+
557
+ #### 4. 指定设备运行
558
+ ```bash
559
+ # 方式 1: 使用设备 ID
560
+ $FLUTTER_PATH run -d 00008110-XXXXX
561
+
562
+ # 方式 2: 让 Flutter 自动选择已连接的 iOS 设备
563
+ $FLUTTER_PATH run -d ios
564
+ ```
565
+
566
+ #### 5. 首次运行授权
567
+ - 真机首次运行会提示"不受信任的开发者"
568
+ - 在 iPhone 上:**设置 → 通用 → VPN 与设备管理 → 开发者 App → 信任**
569
+ - 再次运行 `$FLUTTER_PATH run -d ios`
570
+
571
+ #### 6. 常见问题
572
+ | 问题 | 解决方案 |
573
+ |------|----------|
574
+ | **签名错误** | 检查 Xcode 中的 Team 和 Bundle ID 配置 |
575
+ | **设备未识别** | 重新拔插 USB 线,确保设备已解锁 |
576
+ | **Pod 安装失败** | 执行 `cd ios && pod repo update && pod install && cd ..` |
577
+
578
+ ---
579
+
580
+ ### Android 真机调试步骤
581
+
582
+ #### 1. 硬件准备
583
+ - 使用 USB 数据线连接 Android 设备到电脑
584
+ - 确保设备已充电(建议 > 50%)
585
+
586
+ #### 2. 开启开发者模式
587
+ 在 Android 设备上:
588
+ 1. 进入 **设置 → 关于手机**
589
+ 2. 连续点击 **版本号** 7 次,开启开发者模式
590
+ 3. 返回 **设置 → 系统 → 开发者选项**
591
+ 4. 开启 **USB 调试**
592
+ 5. 连接电脑后,设备会弹出 **允许 USB 调试** 提示,点击 **允许**
593
+
594
+ #### 3. 验证设备连接
595
+ ```bash
596
+ # 方式 1: 使用 adb 命令
597
+ adb devices
598
+
599
+ # 输出示例:
600
+ # List of devices attached
601
+ # XXXXXXXX device
602
+
603
+ # 方式 2: 使用 Flutter 命令
604
+ FLUTTER_PATH=$(which flutter)
605
+ $FLUTTER_PATH devices
606
+ ```
607
+
608
+ 输出示例:
609
+ ```
610
+ SM G9900 (mobile) • XXXXXXXX • android-arm64 • Android 13 (API 33)
611
+ ```
612
+
613
+ #### 4. 指定设备运行
614
+ ```bash
615
+ # 方式 1: 使用设备 ID
616
+ $FLUTTER_PATH run -d XXXXXXXX
617
+
618
+ # 方式 2: 让 Flutter 自动选择已连接的 Android 设备
619
+ $FLUTTER_PATH run -d android
620
+ ```
621
+
622
+ #### 5. 首次构建等待
623
+ - 首次运行会下载 Gradle 依赖(可能需要 5-10 分钟)
624
+ - 等待 `Installing build/app/outputs/flutter-apk/app.apk...` 完成
625
+ - 应用会自动安装并启动
626
+
627
+ #### 6. 常见问题
628
+ | 问题 | 解决方案 |
629
+ |------|----------|
630
+ | **设备未授权** | 在手机上点击"允许 USB 调试",勾选"始终允许" |
631
+ | **adb devices 显示 unauthorized** | 重新拔插 USB 线,重新授权 |
632
+ | **Gradle 下载慢** | 配置国内镜像(修改 `android/build.gradle`) |
633
+ | **设备离线(offline)** | 执行 `adb kill-server && adb start-server` |
634
+
635
+ ---
636
+
637
+ ## 🚀 多设备同时调试
638
+
639
+ 如果同时连接了多个设备,可以使用以下命令选择:
640
+
641
+ ```bash
642
+ FLUTTER_PATH=$(which flutter)
643
+
644
+ # 查看所有设备
645
+ $FLUTTER_PATH devices
646
+
647
+ # 指定某个设备运行
648
+ $FLUTTER_PATH run -d <device-id>
649
+
650
+ # 示例:同时运行在 iOS 和 Android
651
+ $FLUTTER_PATH run -d ios &
652
+ $FLUTTER_PATH run -d android &
653
+ ```
654
+
655
+ ---
656
+
657
+ ## 📊 调试建议
658
+
659
+ ### 热重载(Hot Reload)
660
+ 应用运行后,修改代码保存时会自动热重载:
661
+ - 在终端中按 `r` 键手动触发热重载
662
+ - 按 `R` 键触发热重启(Hot Restart)
663
+ - 按 `q` 键退出调试
664
+
665
+ ### 查看日志
666
+ ```bash
667
+ # Flutter 日志
668
+ $FLUTTER_PATH logs
669
+
670
+ # Android 日志
671
+ adb logcat | grep flutter
672
+
673
+ # iOS 日志(需要 ios-deploy)
674
+ ios-deploy --id <device-id> --debug
675
+ ```
676
+
677
+ ### 性能分析
678
+ ```bash
679
+ # 启动性能分析
680
+ $FLUTTER_PATH run --profile
681
+
682
+ # 启动调试工具
683
+ $FLUTTER_PATH pub global run devtools
684
+ ```
685
+
686
+ ---
687
+
688
+ ## 🔄 完整自动化流程
689
+
690
+ ```mermaid
691
+ graph TD
692
+ A[接收用户需求] --> B[获取 Flutter 实际路径: which flutter]
693
+ B --> C[检查 Flutter 环境]
694
+ C --> D[进入项目父目录并克隆 TUIKit_Flutter]
695
+ D --> E[按照集成文档配置 pubspec.yaml]
696
+ E --> F[按照集成文档配置 iOS Podfile]
697
+ F --> G[按照集成文档配置 main.dart]
698
+ G --> H[调用 get_usersig 工具获取鉴权信息]
699
+ H --> I[按照集成文档实现登录逻辑]
700
+ I --> J[按照集成文档实现核心页面]
701
+ J --> K[调用 record_result 记录集成结果]
702
+ K --> L[使用完整路径执行: $FLUTTER_PATH pub get]
703
+ L --> M{iOS 平台?}
704
+ M -->|是| N[执行 pod install]
705
+ M -->|否| O[跳过 pod install]
706
+ N --> P[引导用户连接真机调试]
707
+ O --> P
708
+ P --> Q{选择运行方式}
709
+ Q -->|模拟器| R[执行: $FLUTTER_PATH run]
710
+ Q -->|iOS 真机| S[执行: $FLUTTER_PATH run -d ios]
711
+ Q -->|Android 真机| T[执行: $FLUTTER_PATH run -d android]
712
+ R --> U[项目启动成功]
713
+ S --> U
714
+ T --> U
715
+ ```
716
+
717
+ ---
718
+
719
+ ## 📝 关键要点总结
720
+
721
+ | 类别 | 要求 |
722
+ |------|------|
723
+ | **框架版本** | Flutter >= 3.29.0、Dart >= 3.7.0、Kotlin >= 1.9 |
724
+ | **接入方式** | 源码接入(从 GitHub 克隆并通过本地路径引用) |
725
+ | **文档优先** | ⚠️ 严格遵循集成文档中的示例代码,不得擅自修改 |
726
+ | **核心页面来源** | 🚨 **严禁自己编写核心页面代码**,必须从 `TUIKit_Flutter/chat/uikit/lib/` 完整复制官方页面文件 |
727
+ | **页面完整性验证** | ⚠️ 核心页面代码必须 > 100 行,包含完整的 State 类、UI 组件树、业务逻辑 |
728
+ | **静默集成** | 代码编写完成后自动安装依赖并启动项目,**必须使用 `which flutter` 获取实际路径** |
729
+ | **凭证获取** | ⚠️ 必须使用 `get_usersig` 工具获取测试鉴权信息 |
730
+ | **安全提示** | ⚠️ 必须告知用户:客户端生成 UserSig 仅适合测试,生产环境必须在服务端生成 |
731
+ | **结果记录** | ⚠️ 集成完成后必须调用 `record_result` 工具记录结果 |
732
+ | **集成模式** | 支持 full-featured(全量)和 chat-only(仅聊天)两种模式 |
733
+ | **chat-only 限制** | ⚠️ 默认排除 ConversationsPage、ContactsPage、SearchPage;用户主动要求时允许集成 |
734
+ | **包名约束** | ⚠️ 必须使用 `package:tuikit_atomic_x/atomicx.dart`,禁止推测包名 |
735
+
736
+ ---
737
+
738
+ ## 🎯 Agent 执行检查清单
739
+
740
+ 在完成代码生成后,Agent 必须确认以下所有项目:
741
+
742
+ ### 项目初始化
743
+ - [ ] 已进入用户项目的父目录
744
+ - [ ] 已克隆 TUIKit_Flutter 仓库到正确位置
745
+ - [ ] 已按照集成文档配置 `pubspec.yaml`
746
+ - [ ] 已按照集成文档配置 iOS Podfile(iOS 平台)
747
+
748
+ ### 代码生成
749
+ - [ ] 已按照集成文档配置 `main.dart`
750
+ - [ ] 🔴 **已调用 `get_usersig` 工具获取 SDKAppID、UserID、UserSig**
751
+ - [ ] 🔴 **已参考 `TUIKit_Flutter/chat/demo/lib/login_page.dart` 实现登录页面**(注意路径前缀)
752
+ - [ ] 🔴 **登录页面不包含 UserID、SDKAppID、UserSig 输入框**
753
+ - [ ] 已按照集成文档实现登录逻辑,自动使用 `get_usersig` 返回的凭证
754
+ - [ ] 🔴 **已从 `TUIKit_Flutter/chat/uikit/lib/` 完整复制官方页面文件**
755
+ - [ ] 🔴 **核心页面代码行数 > 100 行(验证非简化版)**
756
+ - [ ] 🔴 **核心页面包含完整的 State 类、UI 组件树、业务逻辑**
757
+ - [ ] 🔴 **严禁自己编写简化版实现,严禁跳过页面代码生成**
758
+ - [ ] 🔴 **所有 import 使用正确的包名 `package:tuikit_atomic_x/atomicx.dart`**
759
+ - [ ] 已按照集成文档实现页面间的导航逻辑
760
+
761
+ ### 集成模式
762
+ - [ ] 已根据用户需求选择正确的集成模式(full-featured 或 chat-only)
763
+ - [ ] full-featured 模式:已集成 ConversationsPage、ChatPage、ContactsPage 等页面
764
+ - [ ] chat-only 模式:已集成核心页面(ChatPage)
765
+ - [ ] chat-only 模式:已根据用户需求判断是否需要集成扩展功能
766
+ - [ ] 如果用户未主动要求,已确认不包含 ConversationsPage、ContactsPage、SearchPage 等页面
767
+ - [ ] 如果用户主动要求(如"需要 ConversationsPage"),已额外集成用户明确要求的功能
768
+
769
+ ### 安全与提示
770
+ - [ ] 🔴 **已告知用户**:当前生成的代码仅适用于本地测试,正式生产环境必须在服务端生成 UserSig
771
+ - [ ] 已在代码注释中标注测试配置的位置
772
+
773
+ ### 最终检查
774
+ - [ ] 🔴 **已调用 `record_result` 工具记录集成结果**
775
+ - [ ] 🔴 **已使用 `which flutter` 获取 Flutter 实际路径**
776
+ - [ ] 已执行 `$FLUTTER_PATH pub get` 安装依赖(使用完整路径)
777
+ - [ ] 已执行 `pod install`(iOS 平台)
778
+ - [ ] 已执行 `$FLUTTER_PATH run` 启动项目(使用完整路径)
779
+ - [ ] 已提示用户选择设备或模拟器运行
780
+ - [ ] 项目可以正常运行,无报错
781
+
782
+ ---
783
+
784
+ ## 🔗 必须使用的工具
785
+
786
+ ### `get_usersig` - 获取测试鉴权信息
787
+ **用途**:获取腾讯云 IM 测试用的鉴权信息
788
+ - `SDKAppID`: 应用标识
789
+ - `UserID`: 用户 ID
790
+ - `UserSig`: 用户签名
791
+
792
+ **使用约束**:
793
+ - ✅ 必须使用 `get_usersig` 工具获取测试鉴权
794
+ - ❌ 禁止让用户手动输入或从控制台复制
795
+ - ⚠️ 必须告知用户:客户端生成 UserSig 仅适合测试,生产环境必须在服务端生成
796
+
797
+ ### `record_result` - 记录集成结果
798
+ **用途**:记录集成过程和结果,用于统计和分析
799
+
800
+ **调用时机**:在完成所有集成步骤并成功启动项目后调用
801
+
802
+ ---
803
+
804
+ ## 📚 相关资源链接
805
+
806
+ - **TUIKit Flutter GitHub 仓库**:https://github.com/Tencent-RTC/TUIKit_Flutter
807
+ - **腾讯云即时通信 IM 控制台**:https://console.cloud.tencent.com/im
808
+ - **服务端生成 UserSig**:https://cloud.tencent.com/document/product/269/32688
809
+ - **开通 IM 服务**:https://cloud.tencent.com/document/product/269/36838
810
+ - **Flutter 官方文档**:https://flutter.dev/docs
811
+
812
+ ---
813
+
814
+ **适用平台**: Flutter (Android & iOS)
815
+ **TUIKit 版本**: tuikit_atomic_x (AtomicXCore 版本)
816
+ **最低要求**: Flutter >= 3.29.0、Dart >= 3.7.0