106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
| import 'dart:async';
 | |
| 
 | |
| import 'package:guru_app/financial/asset/assets_model.dart';
 | |
| import 'package:guru_app/financial/data/db/order_database.dart';
 | |
| import 'package:guru_app/financial/manifest/manifest.dart';
 | |
| import 'package:guru_app/financial/product/product_model.dart';
 | |
| import 'package:in_app_purchase/in_app_purchase.dart';
 | |
| import 'package:guru_utils/id/id_utils.dart';
 | |
| import 'package:guru_utils/datetime/datetime_utils.dart';
 | |
| 
 | |
| /// Created by Haoyi on 6/2/21
 | |
| 
 | |
| class IapRequest {
 | |
|   final IapProduct product;
 | |
|   final OrderEntity order;
 | |
|   final Completer<bool> completer;
 | |
| 
 | |
|   ProductId get productId => product.productId;
 | |
| 
 | |
|   IapRequest(this.product, this.order, this.completer);
 | |
| 
 | |
|   void response(bool result) {
 | |
|     if (!completer.isCompleted) {
 | |
|       completer.complete(result);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| class PurchaseError implements Exception {
 | |
|   final String msg;
 | |
| 
 | |
|   PurchaseError(this.msg);
 | |
| }
 | |
| 
 | |
| class IapProduct implements Product {
 | |
|   @override
 | |
|   final ProductId productId;
 | |
| 
 | |
|   final ProductDetails details;
 | |
| 
 | |
|   final ProductDetails? offerDetails;
 | |
| 
 | |
|   @override
 | |
|   final Manifest manifest;
 | |
| 
 | |
|   String get sku => productId.sku;
 | |
| 
 | |
|   IapProduct(this.productId, this.details, this.manifest, {this.offerDetails});
 | |
| 
 | |
|   bool isConsumable() {
 | |
|     return productId.isConsumable;
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   String toString() {
 | |
|     return 'IapProduct{productId: $productId}';
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   OrderEntity createOrder() {
 | |
|     return OrderEntity(
 | |
|         orderId: IdUtils.uuidV4(),
 | |
|         sku: productId.sku,
 | |
|         state: TransactionState.pending,
 | |
|         attr: productId.attr,
 | |
|         method: TransactionMethod.iap.index,
 | |
|         currency: details.currencyCode ?? "USD",
 | |
|         cost: details.rawPrice,
 | |
|         category: manifest.category,
 | |
|         timestamp: DateTimeUtils.currentTimeInMillis(),
 | |
|         manifest: manifest);
 | |
|   }
 | |
| 
 | |
| // @override
 | |
| // TransactionEntity buildTransaction({String? tid}) {
 | |
| //   return TransactionEntity(
 | |
| //       tid: tid,
 | |
| //       sku: productId.sku,
 | |
| //       state: TransactionStates.pending,
 | |
| //       attr: productId.attr,
 | |
| //       method: TransactionMethods.iap,
 | |
| //       currency: details.currencySymbol,
 | |
| //       cost: details.rawPrice,
 | |
| //       timestamp: DateTimeUtils.currentTimeInMillis(),
 | |
| //       manifest: manifest);
 | |
| // }
 | |
| }
 | |
| 
 | |
| class IapAsset extends Asset {
 | |
|   final PurchaseDetails details;
 | |
| 
 | |
|   IapAsset(ProductId productId, OrderEntity entity, this.details) : super(productId, entity);
 | |
| 
 | |
|   IapAsset copyWith({OrderEntity? order, PurchaseDetails? details}) {
 | |
|     return IapAsset(productId, order ?? this.order, details ?? this.details);
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   String toString() {
 | |
|     return 'IapPurchased{productId: $productId, item: $details}';
 | |
|   }
 | |
| 
 | |
| // @override
 | |
| // Manifest? get manifest => ;
 | |
| }
 |