mnemo_cards/lib/features/purchase/purchase_deeplink_handler.dart

67 lines
2 KiB
Dart
Raw Normal View History

2024-08-18 16:52:03 +00:00
import 'package:mnemo_cards/di/locator.dart';
import 'package:mnemo_cards/domain/router/dialogs.dart';
import 'package:mnemo_cards/features/analytics/analytics.dart';
import 'package:mnemo_cards/features/deeplinks/deeplinks_manager.dart';
import 'package:mnemo_cards/main.dart';
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
import 'purchase_manager.dart';
class PurchaseDeeplinkHandler implements DeeplinkHandler {
final PurchaseManager _purchaseManager;
PurchaseDeeplinkHandler(this._purchaseManager);
@override
bool canHandle(Uri uri) => uri.host == 'purchase';
@override
void handle(Uri uri) {
final path = uri.path.replaceFirst('/', '');
switch (path) {
case PurchaseInitDeeplink.deeplinkPath:
return _initPurchase(uri);
case PurchaseCheckDeeplink.deeplinkPath:
return _checkPurchase(uri);
}
Analytics.buyDeeplinkError(uri, message: 'Unknown path: ${path}');
}
void _initPurchase(Uri uri) {
final model = PurchaseInitDeeplink.parse(uri);
_purchaseManager.initPurchase(
id: model.id,
productType: model.productType,
paymentId: model.paymentId,
paymentSystem: model.paymentSystem,
source: model.source?.notEmptyOrNull,
);
}
void _checkPurchase(Uri uri) async {
final model = PurchaseCheckDeeplink.parse(uri);
final success = await _purchaseManager.checkPurchase(
product: MnemoCardsProduct(
id: model.id,
type: model.productType,
),
token: model.token,
paymentSystem: model.paymentSystem,
);
if (success) {
if (model.productType == MnemoCardsProductType.pack) {
locator.packUpdater.updatePackAndSaveImages(
model.id,
shouldUpdateHolder: true,
);
} else {
2024-08-24 21:09:58 +00:00
locator.packUpdater.updateAvailablePacks();
2024-08-18 16:52:03 +00:00
locator.userManager.updateUser();
showInfoDialog('Ура! Теперь у вас есть подписка!');
}
} else {
// showErrorDialog('Не уда');
}
}
}