You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

105 lines
3.1 KiB

import 'dart:io';
import 'package:path_provider/path_provider.dart';
class Message {
final String sessionid; // 会话ID
final bool isUser; //标识信息是否来自用户还是AI
final String text; //信息文本内容
final DateTime timestamp; // 消息时间戳
final bool isRecognizing; // 是否为语音识别中的临时消息
final bool hasImage; // 是否包含图片
final String? imagePath; // 图片路径
final Map? meta; //卡片数据
final Map<String, Map<String, dynamic>>? functionCalls; // 函数调用
bool isToolCallsExpanded; // 工具调用是否展开
Message({
// 构造函数
required this.sessionid, // 会话ID
required this.isUser,
required this.text,
DateTime? timestamp,
this.isRecognizing = false,
this.hasImage = false,
this.imagePath,
this.meta,
this.functionCalls,
this.isToolCallsExpanded = false, // 默认不展开
}) : this.timestamp = timestamp ?? DateTime.now();
// 从JSON构造函数
factory Message.fromJson(Map<String, dynamic> json) {
return Message(
sessionid: json['sessionid'] as String, // 会话ID
isUser: json['isUser'] as bool,
text: json['text'] as String,
timestamp: DateTime.parse(json['timestamp'] as String).toLocal(),
isRecognizing: json['isRecognizing'] as bool? ?? false,
hasImage: json['hasImage'] as bool? ?? false,
imagePath: json['imagePath'] as String?,
meta: json['meta'] as Map?,
functionCalls:
json['functionCalls'] as Map<String, Map<String, dynamic>>?,
isToolCallsExpanded: json['isToolCallsExpanded'] as bool? ?? false,
);
}
// 转换为JSON
Map<String, dynamic> toJson() {
return {
'isUser': isUser,
'text': text,
'timestamp': timestamp.toIso8601String(),
'isRecognizing': isRecognizing,
'hasImage': hasImage,
'imagePath': imagePath,
'meta': meta,
'functionCalls': functionCalls,
'isToolCallsExpanded': isToolCallsExpanded,
};
}
// 创建一个加载中的消息
factory Message.loading() {
return Message(
sessionid: '', // 会话ID
isUser: false,
text: '',
timestamp: DateTime.now(),
isRecognizing: true,
);
}
// 复制并修改
Message copyWith({
required String sessionid, // 会话ID
bool? isUser,
String? text,
DateTime? timestamp,
bool? isRecognizing,
bool? hasImage,
String? imagePath,
Map? meta,
Map<String, Map<String, dynamic>>? functionCalls,
bool? isToolCallsExpanded,
}) {
return Message(
sessionid: sessionid, // 会话ID
isUser: isUser ?? this.isUser,
text: text ?? this.text,
timestamp: timestamp ?? this.timestamp,
isRecognizing: isRecognizing ?? this.isRecognizing,
hasImage: hasImage ?? this.hasImage,
imagePath: imagePath ?? this.imagePath,
meta: meta ?? this.meta,
functionCalls: functionCalls ?? this.functionCalls,
isToolCallsExpanded: isToolCallsExpanded ?? this.isToolCallsExpanded,
);
}
// 切换工具调用展开状态
void toggleToolCallsExpanded() {
isToolCallsExpanded = !isToolCallsExpanded;
}
}