Browse Source

refactor(data/models): 重构消息模型以支持更多功能

- 将`role`字段改为更明确的`isUser`布尔值
- 重命名`content`为`text`以提高可读性
- 添加`hasImage`和`imagePath`支持图片消息
- 新增`meta`字段用于存储卡片数据
- 将`isLoading`改为`isRecognizing`以更准确描述语音识别状态
newdev_shunjiawei
lxm 1 year ago
parent
commit
fb95895d1c
  1. 67
      lib/data/models/message_model.dart

67
lib/data/models/message_model.dart

@ -1,58 +1,77 @@
class Message { class Message {
final String role; // 'user' or 'assistant' final bool isUser; //标识信息是否来自用户还是AI
final String content; final String text; //信息文本内容
final DateTime timestamp; final DateTime timestamp; // 消息时间戳
final bool isLoading; final bool isRecognizing; // 是否为语音识别中的临时消息
final bool hasImage; // 是否包含图片
final String? imagePath; // 图片路径
final Map? meta; //卡片数据
Message({ Message({
required this.role, // 构造函数
required this.content, required this.isUser,
required this.timestamp, required this.text,
this.isLoading = false, DateTime? timestamp,
}); this.isRecognizing = false,
this.hasImage = false,
this.imagePath,
this.meta,
}) : this.timestamp = timestamp ?? DateTime.now();
// 从JSON构造函数 // 从JSON构造函数
factory Message.fromJson(Map<String, dynamic> json) { factory Message.fromJson(Map<String, dynamic> json) {
return Message( return Message(
role: json['role'] as String, isUser: json['isUser'] as bool,
content: json['content'] as String, text: json['text'] as String,
timestamp: DateTime.parse(json['timestamp'] as String), timestamp: DateTime.parse(json['timestamp'] as String),
isLoading: json['isLoading'] as bool? ?? false, isRecognizing: json['isRecognizing'] as bool? ?? false,
hasImage: json['hasImage'] as bool? ?? false,
imagePath: json['imagePath'] as String?,
meta: json['meta'] as Map?,
); );
} }
// 转换为JSON // 转换为JSON
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
'role': role, 'isUser': isUser,
'content': content, 'text': text,
'timestamp': timestamp.toIso8601String(), 'timestamp': timestamp.toIso8601String(),
'isLoading': isLoading, 'isRecognizing': isRecognizing,
'hasImage': hasImage,
'imagePath': imagePath,
'meta': meta,
}; };
} }
// 创建一个加载中的消息 // 创建一个加载中的消息
factory Message.loading() { factory Message.loading() {
return Message( return Message(
role: 'assistant', isUser: false,
content: '', text: '',
timestamp: DateTime.now(), timestamp: DateTime.now(),
isLoading: true, isRecognizing: true,
); );
} }
// 复制并修改 // 复制并修改
Message copyWith({ Message copyWith({
String? role, bool? isUser,
String? content, String? text,
DateTime? timestamp, DateTime? timestamp,
bool? isLoading, bool? isRecognizing,
bool? hasImage,
String? imagePath,
Map? meta,
}) { }) {
return Message( return Message(
role: role ?? this.role, isUser: isUser ?? this.isUser,
content: content ?? this.content, text: text ?? this.text,
timestamp: timestamp ?? this.timestamp, timestamp: timestamp ?? this.timestamp,
isLoading: isLoading ?? this.isLoading, isRecognizing: isRecognizing ?? this.isRecognizing,
hasImage: hasImage ?? this.hasImage,
imagePath: imagePath ?? this.imagePath,
meta: meta ?? this.meta,
); );
} }
} }

Loading…
Cancel
Save