product function
Implementation
Future<Product> product(String sku) async {
if (state.init == false) {
throw Exception("R2U — Not initialized");
}
if (state.products[sku] != null) {
return state.products[sku] as Product;
}
final query = {
'product.sku': sku,
'asset.types': ['GLB', 'USDZ'].join(','),
'product_review.status': 'RUNNING',
};
final response = await http.get(Uri.https(
'api.r2u.io', '/customers/${state.customerId}/products/assets/', query));
if (response.statusCode == 200) {
List<dynamic> json = jsonDecode(response.body);
print(json);
final customerProduct = json[0];
final assets = customerProduct['assets'] ?? [];
final productReviews = customerProduct['product_reviews'] ?? [];
final glbAsset = assets.firstWhere((asset) => asset['type'] == 'GLB');
final usdzAsset = assets.firstWhere((asset) => asset['type'] == 'USDZ');
final product = Product(
glb: glbAsset != null ? glbAsset['url'] : '',
usdz: usdzAsset != null ? usdzAsset['url'] : '',
isActive: productReviews.length > 0,
name: customerProduct['name'],
placement: customerProduct['placement'] ?? 'floor',
resize: customerProduct['resize'] ?? false,
pdpUrl: customerProduct['pdpUrl'] ?? '',
sound: customerProduct['soundUrl'] ?? '',
modelId: customerProduct['modelId'],
manufacturerId: customerProduct['manufacturerId'],
);
state.products[sku] = product;
return product;
} else {
throw Exception('R2U — Failed to load product');
}
}