initEvent method

Future<void> initEvent(
  1. SubscriptionInitEvent event,
  2. Emitter<SubscriptionState> emit
)

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));

}