elektronika/lib/app/data/models/product.dart

225 lines
5.8 KiB
Dart

class ProductModel {
late int id;
late String type;
late String name;
String? urlKey;
late String formattedPrice;
String? shortDescription;
String? description;
String? optionValue;
late List<ProductImage> images;
late List<ProductAttribute> attributes;
late bool inStock;
bool? isSaved;
late bool isWishlisted;
bool? isItemInCart;
bool? showQuantityChanger;
late double price;
String? formattedSpecialPrice;
String? formattedRegularPrice;
bool hasDiscount = false;
String? discountRate;
late Reviews reviews;
List<ProductVariation>? variations;
ProductModel({
required this.id,
required this.type,
required this.name,
required this.price,
required this.formattedPrice,
this.shortDescription,
this.description,
this.optionValue,
required this.images,
required this.inStock,
this.isSaved,
required this.isWishlisted,
this.isItemInCart,
this.showQuantityChanger,
this.formattedRegularPrice,
this.formattedSpecialPrice,
this.hasDiscount = false,
this.discountRate,
});
ProductModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
type = json['type'] ?? 'simple';
name = json['name'] ?? '';
price = json['price'] + .0 ?? 0.0;
formattedPrice = json['formatted_price'] ?? '';
shortDescription = json['short_description'];
description = json['description'];
optionValue = json['option_value'];
reviews = Reviews.fromJson(json['reviews']);
if (json['images'] != null) {
images = [];
json['images'].forEach((v) {
images.add(new ProductImage.fromJson(v));
});
} else {
images = [];
}
if (json['attributes'] != null) {
attributes = [];
json['attributes'].forEach((v) {
attributes.add(new ProductAttribute.fromJson(v));
});
} else {
attributes = [];
}
inStock = json['in_stock'];
isSaved = json['is_saved'];
isWishlisted = json['is_wishlisted'] ?? false;
isItemInCart = json['is_item_in_cart'];
showQuantityChanger = json['show_quantity_changer'];
hasDiscount = false;
if (json['formatted_special_price'] != null && json['formatted_regular_price'] != null) {
this.hasDiscount = true;
this.formattedSpecialPrice = json['formatted_special_price'];
this.formattedRegularPrice = json['formatted_regular_price'];
final double regularPrice = json['regular_price'].toDouble();
final double specialPrice = json['special_price'].toDouble();
double discountRt = (100 * (regularPrice - specialPrice)) / regularPrice;
this.discountRate = discountRt.toStringAsFixed(2) + '%';
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['url_key'] = this.urlKey;
data['price'] = this.price;
data['formatted_price'] = this.formattedPrice;
data['short_description'] = this.shortDescription;
data['description'] = this.description;
data['option_value'] = this.optionValue;
data['in_stock'] = this.inStock;
data['is_item_in_cart'] = this.isItemInCart;
data['images'] = this.images.map((v) => v.toJson()).toList();
data['attributes'] = this.attributes.map((v) => v.toJson()).toList();
return data;
}
static List<ProductModel> listFromJson(list) => List<ProductModel>.from(list.map((x) => ProductModel.fromJson(x)));
}
class ProductAttribute {
late String code;
late int value;
late String name;
late String label;
ProductAttribute({
required this.code,
required this.value,
required this.name,
required this.label,
});
ProductAttribute.fromJson(Map<String, dynamic> json) {
code = json['code'];
value = json['value'];
name = json['name'];
label = json['label'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['code'] = this.code;
data['value'] = this.value;
data['name'] = this.name;
data['label'] = this.label;
return data;
}
}
class ProductImage {
late String originalImageUrl;
ProductImage({
required this.originalImageUrl,
});
ProductImage.fromJson(Map<String, dynamic> json) {
originalImageUrl = json['original_image_url'] ?? json['url'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['original_image_url'] = this.originalImageUrl;
return data;
}
}
class ProductVariation {
late int id;
late String colorLabel;
late String sizeLabel;
late String formattedPrice;
String? formattedSpecialPrice;
String? formattedRegularPrice;
late List<ProductImage> images;
ProductVariation({
required this.id,
required this.colorLabel,
required this.sizeLabel,
required this.formattedPrice,
required this.formattedSpecialPrice,
required this.formattedRegularPrice,
required this.images,
});
}
class ProductAdditionalInfoModel {
late int id;
late String code;
late String label;
late String value;
late String adminName;
late String type;
ProductAdditionalInfoModel({
required this.id,
required this.code,
required this.label,
required this.value,
required this.adminName,
required this.type,
});
ProductAdditionalInfoModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
code = json['code'].toString();
label = json['label'].toString();
value = json['value'].toString();
adminName = json['admin_name'].toString();
type = json['type'].toString();
}
}
class Reviews {
late int total;
late String averageRating;
Reviews({
required this.total,
required this.averageRating,
});
Reviews.fromJson(Map<String, dynamic> json) {
total = json['total'];
averageRating = json['average_rating'] ?? '0';
}
}