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.
86 lines
2.3 KiB
86 lines
2.3 KiB
/// Data model representing an item stored in local storage.
|
|
///
|
|
/// This model is used for storing items (e.g., image metadata or records)
|
|
/// in the local database. Each item has a unique ID and can contain
|
|
/// arbitrary JSON data.
|
|
class Item {
|
|
/// Unique identifier for the item.
|
|
final String id;
|
|
|
|
/// JSON-serializable data stored with the item.
|
|
final Map<String, dynamic> data;
|
|
|
|
/// Timestamp when the item was created (milliseconds since epoch).
|
|
final int createdAt;
|
|
|
|
/// Timestamp when the item was last updated (milliseconds since epoch).
|
|
final int updatedAt;
|
|
|
|
/// Creates an [Item] instance.
|
|
///
|
|
/// [id] - Unique identifier for the item.
|
|
/// [data] - JSON-serializable data to store.
|
|
/// [createdAt] - Creation timestamp (defaults to current time).
|
|
/// [updatedAt] - Update timestamp (defaults to current time).
|
|
Item({
|
|
required this.id,
|
|
required this.data,
|
|
int? createdAt,
|
|
int? updatedAt,
|
|
}) : createdAt = createdAt ?? DateTime.now().millisecondsSinceEpoch,
|
|
updatedAt = updatedAt ?? DateTime.now().millisecondsSinceEpoch;
|
|
|
|
/// Creates an [Item] from a database row (Map).
|
|
factory Item.fromMap(Map<String, dynamic> map) {
|
|
return Item(
|
|
id: map['id'] as String,
|
|
data: map['data'] as Map<String, dynamic>,
|
|
createdAt: map['created_at'] as int,
|
|
updatedAt: map['updated_at'] as int,
|
|
);
|
|
}
|
|
|
|
/// Converts the [Item] to a Map for database storage.
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'id': id,
|
|
'data': data,
|
|
'created_at': createdAt,
|
|
'updated_at': updatedAt,
|
|
};
|
|
}
|
|
|
|
/// Creates a copy of this [Item] with updated fields.
|
|
Item copyWith({
|
|
String? id,
|
|
Map<String, dynamic>? data,
|
|
int? createdAt,
|
|
int? updatedAt,
|
|
}) {
|
|
return Item(
|
|
id: id ?? this.id,
|
|
data: data ?? this.data,
|
|
createdAt: createdAt ?? this.createdAt,
|
|
updatedAt: updatedAt ?? this.updatedAt,
|
|
);
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return 'Item(id: $id, data: $data, createdAt: $createdAt, updatedAt: $updatedAt)';
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
if (identical(this, other)) return true;
|
|
return other is Item &&
|
|
other.id == id &&
|
|
other.createdAt == createdAt &&
|
|
other.updatedAt == updatedAt;
|
|
}
|
|
|
|
@override
|
|
int get hashCode => id.hashCode ^ createdAt.hashCode ^ updatedAt.hashCode;
|
|
}
|
|
|