initEvent method
Implementation
Future<void> initEvent(SubscriptionInitEvent event, Emitter<SubscriptionState> emit) async {
AppLogs.showInfoLogs("init event calling::::::::::::::::: $subscriptionProductIds");
//check products availability
final isAvailable = await service.init(subscriptionProductIds);
if (!isAvailable) {
AppLogs.showErrorLogs('In-App Purchases is not available on this platform.');
return;
}
for (int i = 0; i < subscriptionProductIds.length; i++) {
String product = subscriptionProductIds[i];
AppLogs.showInfoLogs("product id ::$product");
}
//load and sort products
final subscriptionProducts = await service.loadProducts();
if(subscriptionProducts == null){
CommonUtilMethods.showSnackBar(context: context, message: "Products not found");
AppLogs.showInfoLogs("subscriptionProducts is empty");
return;
}
emit(state.copyWith(loader: true));
service.listenToPurchaseUpdates((purchases) {
if (!isClosed) {
add(PurchaseUpdateEvent(purchases));
}
});
List<ProductDetails>? products = subscriptionProducts;
if(Platform.isIOS){products.sort((a, b) => a.rawPrice.compareTo(b.rawPrice));}
AppLogs.showInfoLogs("products length: ${products.length}");
for (int i = 0; i < products.length; i++) {
AppLogs.showInfoLogs("product id ::${products[i].id}");
AppLogs.showInfoLogs("product title ::${products[i].title}");
AppLogs.showInfoLogs("product price ::${products[i].price}");
AppLogs.showInfoLogs("product rawPrice ::${products[i].rawPrice}");
}
// save products to state
List<SubscriptionProducts> subscriptionItems = products.map((product) {
return SubscriptionProducts(
id: product.id,
title: product.title,
description: product.description,
price: product.price,
rawPrice: product.rawPrice,
currencyCode: product.currencyCode,
currencySymbol: product.currencySymbol,
selectedItem: state.selectedItem,
subscriptionType: 0,
isSubscribed: false
);
}).toList();
SubscriptionProductsResponse productsResponse = SubscriptionProductsResponse(
products: subscriptionItems,
);
emit(state.copyWith(
products: products,
subscriptionProducts: productsResponse.products,
selectedProductId: productsResponse.products?[state.selectedItem].id,
));
//get old purchase from android
add(GetOldPurchaseEvent(checkActiveFromServer: planActiveCheckFromApi));
emit(state.copyWith(loader: false));
}