68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
| import 'package:guru_app/financial/asset/assets_model.dart';
 | |
| import 'package:guru_app/financial/asset/assets_store.dart';
 | |
| import 'package:guru_app/financial/iap/iap_manager.dart';
 | |
| import 'package:guru_app/financial/iap/iap_model.dart';
 | |
| import 'package:guru_app/financial/igb/igb_manager.dart';
 | |
| import 'package:guru_app/financial/igc/igc_manager.dart';
 | |
| import 'package:guru_app/financial/reward/reward_manager.dart';
 | |
| import 'package:guru_utils/extensions/extensions.dart';
 | |
| 
 | |
| /// Created by Haoyi on 2021/7/2
 | |
| 
 | |
| class FinancialManager {
 | |
|   static final FinancialManager instance = FinancialManager._();
 | |
| 
 | |
|   FinancialManager._();
 | |
| 
 | |
| // final RewardAssetService rewardService;
 | |
| 
 | |
|   Stream<AssetsStore<Asset>> get observableAssets => Rx.combineLatest3<AssetsStore<Asset>,
 | |
|               AssetsStore<Asset>, AssetsStore<Asset>, AssetsStore<Asset>>(
 | |
|           IapManager.instance.observableAssetStore,
 | |
|           IgcManager.instance.observableAssetStore,
 | |
|           RewardManager.instance.observableAssetStore, (iapPurchased, gemAssets, rewarded) {
 | |
|         return _merge(iapPurchased: iapPurchased, gemAssets: gemAssets, rewarded: rewarded);
 | |
|       });
 | |
| 
 | |
|   AssetsStore<Asset> get currentAssets => _merge(
 | |
|       iapPurchased: IapManager.instance.purchasedStore,
 | |
|       gemAssets: IgcManager.instance.purchasedStore,
 | |
|       rewarded: RewardManager.instance.rewardedStore);
 | |
| 
 | |
|   static AssetsStore<Asset> _merge(
 | |
|       {required AssetsStore<Asset> iapPurchased,
 | |
|       required AssetsStore<Asset> gemAssets,
 | |
|       required AssetsStore<Asset> rewarded}) {
 | |
|     final result = AssetsStore<Asset>();
 | |
|     if (iapPurchased.isActive) {
 | |
|       iapPurchased.forEach((productId, possessions) {
 | |
|         result.addAsset(possessions);
 | |
|       });
 | |
|     }
 | |
|     if (gemAssets.isActive) {
 | |
|       gemAssets.forEach((productId, possessions) {
 | |
|         result.addAsset(possessions);
 | |
|       });
 | |
|     }
 | |
|     if (rewarded.isActive) {
 | |
|       rewarded.forEach((productId, possessions) {
 | |
|         result.addAsset(possessions);
 | |
|       });
 | |
|     }
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   void init() {
 | |
|     IapManager.instance.init();
 | |
|     IgcManager.instance.init();
 | |
|     IgbManager.instance.init();
 | |
|     RewardManager.instance.init();
 | |
|   }
 | |
| 
 | |
|   void switchSession(String fromUid, String toUid) {
 | |
|     IapManager.instance.switchSession();
 | |
|     IgcManager.instance.switchSession();
 | |
|     RewardManager.instance.switchSession();
 | |
|   }
 | |
| }
 |