enum DurationType { free, subscription, lifetime, limited } extension DurationTypeExt on DurationType { String enumToString() => toString().split(".").last; DurationType getType(String type) => DurationType.values.firstWhere((e) => e.enumToString() == type); } enum DurationUnit { day, week, month, year } extension DurationUnitExt on DurationUnit { String enumToString() => toString().split(".").last; DurationUnit getType(String type) => DurationUnit.values.firstWhere((e) => e.enumToString() == type); } class Membership { late int membershipId; late String name; String? description; late int duration; late DurationType durationType; late DurationUnit durationUnit; int? trainingPlanId; String? trainingPlanDayIds; Membership(); Membership.fromJson(Map json) { membershipId = json['membershipId']; name = json['name']; description = json['description'] ?? ""; duration = json['duration']; durationType = DurationType.free.getType(json['durationType']); durationUnit = DurationUnit.day.getType(json['durationUnit']); trainingPlanId = json['trainingPlanId'] ?? 0; trainingPlanDayIds = json['trainingPlanDayIds'] ?? ""; } Map toJson() => { "membershipId": membershipId, "name": name, "description": description, "duration": duration, 'durationType': durationType.enumToString(), 'durationUnit': durationUnit.enumToString(), "trainingPlanId": trainingPlanId, "trainingPlanDayIds": trainingPlanDayIds, }; @override String toString() => toJson().toString(); }