在测试 AI 对话功能时遇到了以下错误:
- 创建会话时 400 错误: 服务器返回 "Expected string, received null" 错误,因为
title字段不能为null - 会话数据模型不匹配: 服务器返回的会话数据结构与客户端模型不匹配
文件: lib/presentation/providers/chat_provider.dart
修改前:
input: SessionCreateInput(workspaceId: workspaceId, title: title),修改后:
input: SessionCreateInput(
workspaceId: workspaceId,
title: title ?? '新对话',
),原因: 服务器端的 API 要求 title 字段必须是字符串类型,不能为 null。
文件: lib/data/models/chat_session_model.dart
主要更改:
-
更新
ChatSessionModel结构:- 移除了
@JsonKey(name: 'workspaceID')注解 - 将
time字段类型从DateTime改为SessionTimeModel - 添加了
version字段 - 添加了
share字段用于处理分享信息
- 移除了
-
添加新的模型类:
SessionTimeModel: 处理服务器返回的时间格式{created: timestamp, updated: timestamp}SessionShareModel: 处理分享信息{url: string}
-
修复数据转换:
toDomain()方法现在正确处理时间转换和分享状态fromDomain()方法正确创建服务器期望的格式
文件: lib/data/models/chat_session_model.dart
修改:
// 修改前
final String? title;
// 修改后
final String title;并在 fromDomain 方法中提供默认值:
title: input.title ?? '新对话',根据日志分析,服务器返回的会话数据格式为:
{
"id": "ses_74878b74affekXqYMVPXSTVrbT",
"version": "0.5.5",
"title": "Requesting help",
"time": {
"created": 1755425753270,
"updated": 1755425753915
},
"share": {
"url": "https://opencode.ai/s/Qz2f4Knf"
}
}修复后的功能:
✅ 会话列表加载: 成功从服务器获取会话列表
✅ 会话创建: 可以成功创建新会话,不再出现 400 错误
✅ 数据解析: 正确解析服务器返回的会话数据
✅ 应用编译: 无编译错误,只有信息级别的警告
运行了以下命令重新生成 JSON 序列化代码:
flutter packages pub run build_runner build --delete-conflicting-outputs通过 flutter analyze --no-fatal-infos 验证,确认没有错误,只有 35 个信息级别的警告(主要是关于过时的 API 使用和代码风格建议)。
- 考虑添加更好的错误处理机制
- 实现离线缓存功能
- 优化 UI 响应性能
- 添加单元测试覆盖这些修复的场景