Initial commit
This commit is contained in:
59
lib/models/message.dart
Normal file
59
lib/models/message.dart
Normal file
@@ -0,0 +1,59 @@
|
||||
enum MessageType { text, markdown, image, loading }
|
||||
|
||||
enum MessageSender { user, ai }
|
||||
|
||||
class ChatMessage {
|
||||
final String id;
|
||||
final String content;
|
||||
final MessageType type;
|
||||
final MessageSender sender;
|
||||
final DateTime timestamp;
|
||||
final List<String>? imageUrls;
|
||||
|
||||
const ChatMessage({
|
||||
required this.id,
|
||||
required this.content,
|
||||
required this.type,
|
||||
required this.sender,
|
||||
required this.timestamp,
|
||||
this.imageUrls,
|
||||
});
|
||||
|
||||
ChatMessage copyWith({
|
||||
String? id,
|
||||
String? content,
|
||||
MessageType? type,
|
||||
MessageSender? sender,
|
||||
DateTime? timestamp,
|
||||
List<String>? imageUrls,
|
||||
}) {
|
||||
return ChatMessage(
|
||||
id: id ?? this.id,
|
||||
content: content ?? this.content,
|
||||
type: type ?? this.type,
|
||||
sender: sender ?? this.sender,
|
||||
timestamp: timestamp ?? this.timestamp,
|
||||
imageUrls: imageUrls ?? this.imageUrls,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'content': content,
|
||||
'type': type.name,
|
||||
'sender': sender.name,
|
||||
'timestamp': timestamp.toIso8601String(),
|
||||
'imageUrls': imageUrls,
|
||||
};
|
||||
|
||||
factory ChatMessage.fromJson(Map<String, dynamic> json) => ChatMessage(
|
||||
id: json['id'] ?? '',
|
||||
content: json['content'] ?? '',
|
||||
type: MessageType.values.byName(json['type'] ?? 'text'),
|
||||
sender: MessageSender.values.byName(json['sender'] ?? 'user'),
|
||||
timestamp: DateTime.tryParse(json['timestamp'] ?? '') ?? DateTime.now(),
|
||||
imageUrls: json['imageUrls'] != null
|
||||
? List<String>.from(json['imageUrls'])
|
||||
: null,
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user