getOldPurchaseEvent method
Implementation
Future<void> getOldPurchaseEvent(GetOldPurchaseEvent event,Emitter<SubscriptionState> emit) async {
int purchaseTime = 0;
List<GooglePlayPurchaseDetails> androidPastPurchases = [];
List<PurchaseDetails> iosPastPurchases = [];
if(Platform.isAndroid){
final InAppPurchaseAndroidPlatformAddition androidAddition =
inAppPurchase.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
final QueryPurchaseDetailsResponse response =
await androidAddition.queryPastPurchases();
if (response.error != null) {
AppLogs.showErrorLogs("Android past purchase error: ${response.error}");
return;
}
if(response.pastPurchases.isNotEmpty){
androidPastPurchases = response.pastPurchases;
}
}else{
iosPastPurchases = await getIosPastPurchases();
}
if(planActiveCheckFromApi == true){
CheckSubscriptionData? checkSubscriptionData ;
if(checkSubscriptionApi.isNotEmpty) {
checkSubscriptionData = await service
.checkSubscription(
apiType: checkSubscriptonApiRequestType,
apiUrl: checkSubscriptionApi
);
}
bool isActive = false;
if(checkSubscriptionData != null){
isActive = checkSubscriptionData.isActive ?? false;
}
if (isActive) {
AppLogs.showInfoLogs("β
Active subscription");
emit(state.copyWith( isSubscribed: true,
pastSubscriptionId: checkSubscriptionData?.productId ?? "",
subscriptionType: checkSubscriptionData?.subscriptionType ?? 0,
subsExpiryDate: checkSubscriptionData?.expiryDate ?? "",
purchases: Platform.isAndroid ? androidPastPurchases : iosPastPurchases
));
final paidIndex = state.products.indexWhere((p) => p.id == checkSubscriptionData?.productId);
emit(state.copyWith(selectedItem: paidIndex));
}else{
AppLogs.showInfoLogs("β No active subscription");
emit(state.copyWith( isSubscribed: false,
pastSubscriptionId: "",
subscriptionType: 0,
subsExpiryDate: "",
selectedItem: 0
));
}
}else{
if(Platform.isAndroid && androidPastPurchases.isNotEmpty){
for (int i = 0; i < androidPastPurchases.length; i++) {
final purchasedProductId = androidPastPurchases[i].productID;
final data = jsonDecode(
androidPastPurchases[i].billingClientPurchase.originalJson);
final purchaseTimeMillis = data['purchaseTime'] ?? 0;
final purchaseDate = DateTime.fromMillisecondsSinceEpoch(
purchaseTimeMillis);
// Format date for logs
final formattedDate = DateFormat('dd/MM/yyyy h:mm:ss').format(
purchaseDate);
AppLogs.showInfoLogs("Purchase Date: $formattedDate");
// π Lookup duration from your subscriptionPlans map
var duration = calculatePlanDuration(productId: purchasedProductId);
// Add duration to purchase date
AppLogs.showInfoLogs("Duration: $duration");
final expiryDate = purchaseDate.add(duration ?? Duration.zero);
// Format expiry date for logs
final formattedExpiry = DateFormat('dd/MM/yyyy h:mm:ss').format(expiryDate);
AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");
final currentDate = DateTime.now();
final formattedCurrentDate = DateFormat('dd/MM/yyyy h:mm:ss').format(currentDate);
AppLogs.showInfoLogs("current Date: $formattedCurrentDate");
// Check expired or not
final isSubscribed = expiryDate.isAfter(DateTime.now());
if (androidPastPurchases[i].status == PurchaseStatus.purchased) {
final paidIndex = state.products.indexWhere((p) => p.id == purchasedProductId);
AppLogs.showInfoLogs("paidIndex: $paidIndex");
AppLogs.showInfoLogs("purchasedProductId: ${androidPastPurchases[i].productID}");
emit(state.copyWith(
isSubscribed: isSubscribed == true ? true : false,
purchases: androidPastPurchases,
selectedProductId: purchasedProductId,
pastSubscriptionId: purchasedProductId,
selectedItem: isSubscribed == true ? paidIndex : 0, ));
AppLogs.showInfoLogs(isSubscribed == true ? "β
Active subscription" : "β Inactive subscription");
AppLogs.showInfoLogs("purchasedId: $purchasedProductId");
AppLogs.showInfoLogs("paidIndex (UI index): $paidIndex");
break;
} // stop after first match
}
}else if(Platform.isIOS && iosPastPurchases.isNotEmpty){
for (int i = 0; i < iosPastPurchases.length; i++) {
final purchasedProductId = iosPastPurchases[i].productID;
purchaseTime = int.tryParse(iosPastPurchases[i].transactionDate ?? "0") ?? 0;
final purchaseDate = DateTime.fromMillisecondsSinceEpoch(purchaseTime);
// Format date for logs
final formattedDate = DateFormat('dd/MM/yyyy HH:mm:ss').format(purchaseDate);
AppLogs.showInfoLogs("Purchase Date: $formattedDate");
// π Lookup duration from your subscriptionPlans map
var duration = calculatePlanDuration(productId: purchasedProductId);
AppLogs.showInfoLogs("Duration: $duration");
// Add duration to purchase date
final expiryDate = purchaseDate.add(duration ?? Duration.zero);
// Format expiry date for logs
final formattedExpiry = DateFormat('dd/MM/yyyy HH:mm:ss').format(expiryDate);
AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");
// Check expired or not
final isExpired = expiryDate.isAfter(DateTime.now());
final isSubscribed = !isExpired;
if (iosPastPurchases[i].status == PurchaseStatus.purchased) {
final paidIndex =
state.products.indexWhere((p) => p.id == purchasedProductId);
emit(state.copyWith(
isSubscribed: isSubscribed,
purchases: iosPastPurchases,
selectedProductId: purchasedProductId,
pastSubscriptionId: purchasedProductId,
selectedItem: isSubscribed ? paidIndex : 0,
));
AppLogs.showInfoLogs(
"${isSubscribed ? "β
Active" : "β Expired"} | productId: $purchasedProductId",
);
break; // handle first valid purchase only
}
}
}
}
emit(state.copyWith(loader: false));
// if(Platform.isAndroid){
// final InAppPurchaseAndroidPlatformAddition androidAddition =
// inAppPurchase.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
//
// final QueryPurchaseDetailsResponse response =
// await androidAddition.queryPastPurchases();
//
// if (response.error != null) {
// AppLogs.showErrorLogs("Android past purchase error: ${response.error}");
// return;
// }
// if(response.pastPurchases.isNotEmpty){
// for (int i = 0; i < response.pastPurchases.length; i++) {
// final purchasedProductId = response.pastPurchases[i].productID;
//
// final data = jsonDecode(response.pastPurchases[i].billingClientPurchase.originalJson);
//
// final purchaseTimeMillis = data['purchaseTime'] ?? 0;
// final purchaseDate = DateTime.fromMillisecondsSinceEpoch(purchaseTimeMillis);
//
// // Format date for logs
// final formattedDate = DateFormat('dd/MM/yyyy h:mm:ss').format(purchaseDate);
// AppLogs.showInfoLogs("Purchase Date: $formattedDate");
//
// // π Lookup duration from your subscriptionPlans map
// final duration = subscriptionPlans[purchasedProductId] ?? const Duration(days: 30);
//
// // Add duration to purchase date
// final expiryDate = purchaseDate.add(duration);
//
// // Format expiry date for logs
// final formattedExpiry = DateFormat('dd/MM/yyyy h:mm:ss').format(expiryDate);
// AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");
//
// final currentDate = DateTime.now();
// final formattedCurrentDate = DateFormat('dd/MM/yyyy h:mm:ss').format(currentDate);
// AppLogs.showInfoLogs("current Date: $formattedCurrentDate");
//
// // Check expired or not
// final isSubscribed = expiryDate.isAfter(DateTime.now());
//
// if (response.pastPurchases[i].status == PurchaseStatus.purchased) {
// final paidIndex = state.products.indexWhere((p) => p.id == purchasedProductId);
//
// AppLogs.showInfoLogs("paidIndex: $paidIndex");
// AppLogs.showInfoLogs("purchasedProductId: ${response.pastPurchases[i].productID}");
//
// emit(state.copyWith(
// isSubscribed: isSubscribed == true ? true : false,
// purchases: response.pastPurchases,
// selectedProductId: purchasedProductId,
// pastSubscriptionId: purchasedProductId,
// selectedItem: isSubscribed == true ? paidIndex : 0, ));
//
// AppLogs.showInfoLogs("${isSubscribed == true ? "β
Active subscription" : "β Inactive subscription"}");
// AppLogs.showInfoLogs("purchasedId: $purchasedProductId");
// AppLogs.showInfoLogs("paidIndex (UI index): $paidIndex");
// break;
// } // stop after first match
// }
// }
//
// }
// else if (Platform.isIOS) {
//
// List<PurchaseDetails> pastPurchases = await getIosPastPurchases();
//
// if(pastPurchases.isNotEmpty){
// for (int i = 0; i < pastPurchases.length; i++) {
// final purchasedProductId = pastPurchases[i].productID;
//
// purchaseTime = int.tryParse(pastPurchases[i].transactionDate ?? "0") ?? 0;
//
// final purchaseDate = DateTime.fromMillisecondsSinceEpoch(purchaseTime);
//
// // Format date for logs
// final formattedDate = DateFormat('dd/MM/yyyy HH:mm:ss').format(purchaseDate);
// AppLogs.showInfoLogs("Purchase Date: $formattedDate");
//
// // π Lookup duration from your subscriptionPlans map
// final duration = subscriptionPlans[purchasedProductId] ?? const Duration(days: 30);
//
// // Add duration to purchase date
// final expiryDate = purchaseDate.add(duration);
//
// // Format expiry date for logs
// final formattedExpiry = DateFormat('dd/MM/yyyy HH:mm:ss').format(expiryDate);
// AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");
//
// // Check expired or not
// final isExpired = expiryDate.isAfter(DateTime.now());
// final isSubscribed = !isExpired;
//
// if (pastPurchases[i].status == PurchaseStatus.purchased) {
// final paidIndex =
// state.products.indexWhere((p) => p.id == purchasedProductId);
//
// emit(state.copyWith(
// isSubscribed: isSubscribed,
// purchases: pastPurchases,
// selectedProductId: purchasedProductId,
// pastSubscriptionId: purchasedProductId,
// selectedItem: isSubscribed ? paidIndex : 0,
// ));
//
// AppLogs.showInfoLogs(
// "${isSubscribed ? "β
Active" : "β Expired"} | productId: $purchasedProductId",
// );
//
// break; // handle first valid purchase only
// }
// }
// }
// }
}