// ignore_for_file: library_private_types_in_public_api, invalid_use_of_protected_member import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:app_set_id/app_set_id.dart'; import 'package:dio/dio.dart'; import 'package:fikoyt_mesaici/core/fiko_istek.dart'; import 'package:fikoyt_mesaici/core/fikoyt.service.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart' hide FormData; import 'package:in_app_purchase/in_app_purchase.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:vrouter/vrouter.dart'; import 'package:mobile_device_identifier/mobile_device_identifier.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; String? deviceId; @override void onInit() async { super.onInit(); final deviceInfo = await DeviceInfoPlugin().androidInfo; final allInfo = deviceInfo.data; deviceId = await MobileDeviceIdentifier().getDeviceId(); // try { // deviceId = await MobileDeviceIdentifier().getDeviceId(); // } on PlatformException { // deviceId = null; // } try { await ozelMesaiciDurumSorgula(); // ignore: empty_catches } catch (e) { print(e); } 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 { // if (kDebugMode == false) { await ozelMesaiciDurumSorgula(); await _loadProducts(); await _restorePurchases(); satistaki_urunler.refresh(); alinmis_urunler.refresh(); if (!miAlinanUrunVar() && ozelSurum.value != true) { FikoYTService.navigatorKey.currentContext?.vRouter.to('/mesaici/ayarlar/satin-al'); return; } // } } RxString promosyonKodu = "".obs; RxBool ozelSurum = false.obs; Rx bitisTarihi = Rx(null); ozelMesaiciDurumSorgula() async { var formData = FormData(); formData.fields.add( MapEntry( "req_body", jsonEncode({"cihaz_id": deviceId, "promosyon_kodu": promosyonKodu.value, "hesap": FikoYTService.servisMesaici.ayarlarModel?.value.hesapAyarlari.toJson()}).toString(), ), ); Completer bekle = Completer.sync(); istek_yap(komut: "mesaici.dogrula", parametreler: formData).listen((sonuc) async { if (sonuc.turu == IstekOlayTuru.Cevaplandi) { if (sonuc.sonuc != null) { if (sonuc.sonuc["sonuc"]["aktif"] == true) { ozelSurum.value = true; bitisTarihi.value = DateTime.parse((sonuc.sonuc["sonuc"]["bitis_tarihi"] ?? DateTime(0))); // print(DateTime.fromMillisecondsSinceEpoch(int.parse(sonuc.sonuc["sonuc"]["bitis_tarihi"] ?? DateTime(0).millisecondsSinceEpoch.toString()))); } else { ozelSurum.value = false; bitisTarihi.value = null; } ozelSurum.refresh(); // if (sonuc.sonuc["sonuc"]["mesaj"] != null) { // SnackBar snck = SnackBar( // content: Text(sonuc.sonuc["sonuc"]["mesaj"]), // duration: const Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi // ); // ScaffoldMessenger.of(FikoYTService.navigatorKey.currentContext!).showSnackBar(snck); // } bekle.complete(); } } }).onError((hata) async { // print(hata.toString()); bekle.complete(); }); await bekle.future; } }