// ignore_for_file: library_private_types_in_public_api, invalid_use_of_protected_member import 'dart:async'; import 'package:fikoyt_akcali/core/fikoyt.service.dart'; import 'package:get/get.dart'; import 'package:in_app_purchase/in_app_purchase.dart'; import 'package:vrouter/vrouter.dart'; class PageAyarSatinAlLogic extends GetxController { //---> final InAppPurchase _inAppPurchase = InAppPurchase.instance; final List _productIDs = ['aylik_kullanim_mesaici_fikoyt.1', '6_aylik_kullanim_mesaici_fikoyt.1', 'yillik_kullanim_mesaici_fikoyt.1']; RxBool available = false.obs; RxList satistaki_urunler = [].obs; RxBool purchasePending = false.obs; RxList alinmis_urunler = [].obs; // Satın alınan ürünler listesi late StreamSubscription> _subscription; //---> RxBool isLoading = false.obs; //---> late Timer timer; @override void onInit() async { super.onInit(); final purchaseUpdated = _inAppPurchase.purchaseStream; _subscription = purchaseUpdated.listen((purchases) { _listenToPurchaseUpdated(purchases); }); await _initialize(); // timer = Timer.periodic( // const Duration(minutes: 1), // (timer) async => await lisansKontrol(), // ); } @override void dispose() { _subscription.cancel(); timer.cancel(); super.dispose(); } Future _initialize() async { available.value = await _inAppPurchase.isAvailable(); if (available.value) { await _loadProducts(); await _restorePurchases(); satistaki_urunler.refresh(); alinmis_urunler.refresh(); } } // Geçmiş satın almaları geri yükleme Future _restorePurchases() async { isLoading.value = true; // Geçmiş satın almaları geri yüklemek için restorePurchases çağrısı await _inAppPurchase.restorePurchases(); isLoading.value = false; } Future _loadProducts() async { Set ids = _productIDs.toSet(); ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(ids); satistaki_urunler.value = response.productDetails ..sort( (a, b) => a.rawPrice.compareTo(b.rawPrice), ); } void buyProduct(ProductDetails productDetails) { final PurchaseParam purchaseParam = PurchaseParam(productDetails: productDetails); _inAppPurchase.buyNonConsumable(purchaseParam: purchaseParam); } void _listenToPurchaseUpdated(List purchaseDetailsList) async { for (var purchaseDetails in purchaseDetailsList) { if (purchaseDetails.status == PurchaseStatus.pending) { purchasePending.value = true; } else if (purchaseDetails.status == PurchaseStatus.purchased || purchaseDetails.status == PurchaseStatus.restored) { purchasePending.value = false; // Satın alınan ürünü purchasedProducts listesine ekle alinmis_urunler.add(purchaseDetails); } else if (purchaseDetails.status == PurchaseStatus.error) { purchasePending.value = false; print(purchaseDetails.error.toString()); // Hata oluştu, hata mesajını gösterebilirsiniz. } if (purchaseDetails.pendingCompletePurchase) { await _inAppPurchase.completePurchase(purchaseDetails); } } satistaki_urunler.refresh(); alinmis_urunler.refresh(); } bool miUrunAlinmis(String urun) { return alinmis_urunler.value.any((element) => element.productID == urun); } bool miAlinanUrunVar() { return alinmis_urunler.where((urun) => _productIDs.contains(urun.productID)).toList().isNotEmpty; } lisansKontrol() async { await _loadProducts(); await _restorePurchases(); satistaki_urunler.refresh(); alinmis_urunler.refresh(); if (!miAlinanUrunVar()) { FikoYTService.navigatorKey.currentContext?.vRouter.to('/mesaici/ayarlar/satin-al'); return; } } }