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.
83 lines
2.4 KiB
83 lines
2.4 KiB
// problem_model.dart |
|
import 'dart:convert'; |
|
import 'package:problem_check_system/data/models/enum_model.dart'; |
|
import 'package:problem_check_system/data/models/image_metadata_model.dart'; |
|
|
|
class Problem { |
|
String? id; |
|
String description; |
|
String location; |
|
List<ImageMetadata> imageUrls; |
|
DateTime creationTime; |
|
SyncStatus syncStatus; |
|
String? censorTaskId; |
|
String? bindData; |
|
bool isChecked; |
|
|
|
Problem({ |
|
this.id, |
|
required this.description, |
|
required this.location, |
|
required this.imageUrls, |
|
required this.creationTime, |
|
this.syncStatus = SyncStatus.notSynced, |
|
this.censorTaskId, |
|
this.bindData, |
|
this.isChecked = false, |
|
}); |
|
|
|
// copyWith method to create a new instance with updated values |
|
Problem copyWith({ |
|
String? id, |
|
String? description, |
|
String? location, |
|
List<ImageMetadata>? imageUrls, |
|
DateTime? creationTime, |
|
SyncStatus? syncStatus, |
|
String? censorTaskId, |
|
String? bindData, |
|
}) { |
|
return Problem( |
|
id: id ?? this.id, |
|
description: description ?? this.description, |
|
location: location ?? this.location, |
|
imageUrls: imageUrls ?? this.imageUrls, |
|
creationTime: creationTime ?? this.creationTime, |
|
syncStatus: syncStatus ?? this.syncStatus, |
|
censorTaskId: censorTaskId ?? this.censorTaskId, |
|
bindData: bindData ?? this.bindData, |
|
); |
|
} |
|
|
|
// toMap method for serializing to a database-friendly Map |
|
Map<String, dynamic> toMap() { |
|
return { |
|
'id': id, |
|
'description': description, |
|
'location': location, |
|
'imageUrls': jsonEncode(imageUrls.map((meta) => meta.toMap()).toList()), |
|
'creationTime': creationTime.millisecondsSinceEpoch, |
|
'syncStatus': syncStatus.index, |
|
'censorTaskId': censorTaskId, |
|
'bindData': bindData, |
|
}; |
|
} |
|
|
|
// fromMap factory constructor for deserializing from a Map |
|
factory Problem.fromMap(Map<String, dynamic> map) { |
|
return Problem( |
|
id: map['id'], |
|
description: map['description'], |
|
location: map['location'], |
|
imageUrls: (jsonDecode(map['imageUrls']) as List) |
|
.map((item) => ImageMetadata.fromMap(item as Map<String, dynamic>)) |
|
.toList(), |
|
creationTime: DateTime.fromMillisecondsSinceEpoch( |
|
map['creationTime'] as int, |
|
), |
|
syncStatus: SyncStatus.values[map['syncStatus'] as int], |
|
censorTaskId: map['censorTaskId'], |
|
bindData: map['bindData'], |
|
); |
|
} |
|
}
|
|
|