Browse Source
- 将`role`字段改为更明确的`isUser`布尔值 - 重命名`content`为`text`以提高可读性 - 添加`hasImage`和`imagePath`支持图片消息 - 新增`meta`字段用于存储卡片数据 - 将`isLoading`改为`isRecognizing`以更准确描述语音识别状态newdev_shunjiawei
1 changed files with 43 additions and 24 deletions
@ -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…
Reference in new issue