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>? 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 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), 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>?, isToolCallsExpanded: json['isToolCallsExpanded'] as bool? ?? false, ); } // 转换为JSON Map 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>? 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; } }