diff --git a/lib/model/latlng.dart b/lib/model/latlng.dart index d2ee885..bda28da 100644 --- a/lib/model/latlng.dart +++ b/lib/model/latlng.dart @@ -4,4 +4,12 @@ class LatLng { LatLng(this.lat, this.lng); LatLng.empty() : lat = 0, lng = 0; + + factory LatLng.fromJson(Map json) { + return LatLng(json['lat'] as double, json['lng'] as double); + } + + Map toJson() { + return {'lat': lat, 'lng': lng}; + } } diff --git a/lib/model/location.dart b/lib/model/location.dart index 1464424..d43ea86 100644 --- a/lib/model/location.dart +++ b/lib/model/location.dart @@ -11,4 +11,15 @@ class Location { String get address => _address ?? ''; LatLng get coordinates => _coordinates ?? LatLng.empty(); + + factory Location.fromJson(Map json) { + return Location( + address: json['address'] as String, + coordinates: LatLng.fromJson(json['coordinates']), + ); + } + + Map toJson() { + return {'address': address, 'coordinates': coordinates}; + } } diff --git a/lib/model/task.dart b/lib/model/task.dart index 3030d53..e1b8089 100644 --- a/lib/model/task.dart +++ b/lib/model/task.dart @@ -54,4 +54,48 @@ class Task { url: url ?? this.url, ); } + + factory Task.fromJson(Map json) { + return Task( + id: json['id'] as String, + title: json['title'] as String, + description: json['description'] as String? ?? '', + start: json['start'] != null + ? DateTime.parse(json['start'] as String) + : null, + due: json['due'] != null ? DateTime.parse(json['due'] as String) : null, + isCompleted: json['isCompleted'] as bool? ?? false, + category: json['category'] as String? ?? '', + subtasks: + (json['subtasks'] as List?) + ?.map((e) => Task.fromJson(e as Map)) + .toList() ?? + [], + alarms: + (json['alarms'] as List?) + ?.map((e) => DateTime.parse(e as String)) + .toList() ?? + [], + location: json['location'] != null + ? Location.fromJson(json['location'] as Map) + : null, + url: json['url'] as String? ?? '', + ); + } + + Map toJson() { + return { + 'id': id, + 'title': title, + 'description': description, + 'start': start?.toIso8601String(), + 'due': due?.toIso8601String(), + 'isCompleted': isCompleted, + 'category': category, + 'subtasks': subtasks.map((e) => e.toJson()).toList(), + 'alarms': alarms.map((e) => e.toIso8601String()).toList(), + 'location': location?.toJson(), + 'url': url, + }; + } }