Fix Hive serialization with toMap() method
This commit is contained in:
@@ -29,12 +29,12 @@ class LocalStorageService {
|
|||||||
|
|
||||||
// Tasks
|
// Tasks
|
||||||
Future<void> saveTask(TaskModel task) async {
|
Future<void> saveTask(TaskModel task) async {
|
||||||
await _tasksBox.put(task.id, task.toFirestore());
|
await _tasksBox.put(task.id, task.toMap()); // Используем toMap() для Hive
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> saveTasks(List<TaskModel> tasks) async {
|
Future<void> saveTasks(List<TaskModel> tasks) async {
|
||||||
for (final task in tasks) {
|
for (final task in tasks) {
|
||||||
await _tasksBox.put(task.id, task.toFirestore());
|
await _tasksBox.put(task.id, task.toMap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -103,8 +103,12 @@ class TaskModel {
|
|||||||
|
|
||||||
factory TaskModel.fromFirestore(DocumentSnapshot doc) {
|
factory TaskModel.fromFirestore(DocumentSnapshot doc) {
|
||||||
final data = doc.data() as Map<String, dynamic>;
|
final data = doc.data() as Map<String, dynamic>;
|
||||||
|
return TaskModel.fromMap(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
factory TaskModel.fromMap(Map<String, dynamic> data) {
|
||||||
return TaskModel(
|
return TaskModel(
|
||||||
id: doc.id,
|
id: data['id'] ?? '',
|
||||||
title: data['title'] ?? '',
|
title: data['title'] ?? '',
|
||||||
description: data['description'],
|
description: data['description'],
|
||||||
projectId: data['projectId'] ?? '',
|
projectId: data['projectId'] ?? '',
|
||||||
@@ -121,13 +125,19 @@ class TaskModel {
|
|||||||
creatorId: data['creatorId'],
|
creatorId: data['creatorId'],
|
||||||
tags: List<String>.from(data['tags'] ?? []),
|
tags: List<String>.from(data['tags'] ?? []),
|
||||||
dueDate: data['dueDate'] != null
|
dueDate: data['dueDate'] != null
|
||||||
|
? (data['dueDate'] is Timestamp
|
||||||
? (data['dueDate'] as Timestamp).toDate()
|
? (data['dueDate'] as Timestamp).toDate()
|
||||||
|
: DateTime.parse(data['dueDate']))
|
||||||
: null,
|
: null,
|
||||||
startDate: data['startDate'] != null
|
startDate: data['startDate'] != null
|
||||||
|
? (data['startDate'] is Timestamp
|
||||||
? (data['startDate'] as Timestamp).toDate()
|
? (data['startDate'] as Timestamp).toDate()
|
||||||
|
: DateTime.parse(data['startDate']))
|
||||||
: null,
|
: null,
|
||||||
completedDate: data['completedDate'] != null
|
completedDate: data['completedDate'] != null
|
||||||
|
? (data['completedDate'] is Timestamp
|
||||||
? (data['completedDate'] as Timestamp).toDate()
|
? (data['completedDate'] as Timestamp).toDate()
|
||||||
|
: DateTime.parse(data['completedDate']))
|
||||||
: null,
|
: null,
|
||||||
alarms: (data['alarms'] as List<dynamic>?)
|
alarms: (data['alarms'] as List<dynamic>?)
|
||||||
?.map((a) => AlarmData.fromMap(a as Map<String, dynamic>))
|
?.map((a) => AlarmData.fromMap(a as Map<String, dynamic>))
|
||||||
@@ -136,8 +146,12 @@ class TaskModel {
|
|||||||
estimatedHours: data['estimatedHours'] ?? 0,
|
estimatedHours: data['estimatedHours'] ?? 0,
|
||||||
spentHours: data['spentHours'] ?? 0,
|
spentHours: data['spentHours'] ?? 0,
|
||||||
aiMetadata: data['aiMetadata'] ?? {},
|
aiMetadata: data['aiMetadata'] ?? {},
|
||||||
createdAt: (data['createdAt'] as Timestamp).toDate(),
|
createdAt: data['createdAt'] is Timestamp
|
||||||
updatedAt: (data['updatedAt'] as Timestamp).toDate(),
|
? (data['createdAt'] as Timestamp).toDate()
|
||||||
|
: DateTime.parse(data['createdAt']),
|
||||||
|
updatedAt: data['updatedAt'] is Timestamp
|
||||||
|
? (data['updatedAt'] as Timestamp).toDate()
|
||||||
|
: DateTime.parse(data['updatedAt']),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,6 +179,31 @@ class TaskModel {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Для сохранения в Hive (конвертируем Timestamp в строки)
|
||||||
|
Map<String, dynamic> toMap() {
|
||||||
|
return {
|
||||||
|
'id': id,
|
||||||
|
'title': title,
|
||||||
|
'description': description,
|
||||||
|
'projectId': projectId,
|
||||||
|
'parentTaskId': parentTaskId,
|
||||||
|
'status': status.name,
|
||||||
|
'priority': priority.name,
|
||||||
|
'assigneeId': assigneeId,
|
||||||
|
'creatorId': creatorId,
|
||||||
|
'tags': tags,
|
||||||
|
'dueDate': dueDate?.toIso8601String(),
|
||||||
|
'startDate': startDate?.toIso8601String(),
|
||||||
|
'completedDate': completedDate?.toIso8601String(),
|
||||||
|
'alarms': alarms.map((a) => a.toMap()).toList(),
|
||||||
|
'estimatedHours': estimatedHours,
|
||||||
|
'spentHours': spentHours,
|
||||||
|
'aiMetadata': aiMetadata,
|
||||||
|
'createdAt': createdAt.toIso8601String(),
|
||||||
|
'updatedAt': updatedAt.toIso8601String(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
TaskModel copyWith({
|
TaskModel copyWith({
|
||||||
String? id,
|
String? id,
|
||||||
String? title,
|
String? title,
|
||||||
|
|||||||
Reference in New Issue
Block a user