delete method
Future<void>
delete({
- required DocumentBase<
StripePurchaseModel> purchase, - Duration timeout = const Duration(seconds: 15),
Delete (cancel) a subscription to purchase
that has been started.
開始したpurchase
のサブスクリプションを削除(キャンセル)します。
Implementation
Future<void> delete({
required DocumentBase<StripePurchaseModel> purchase,
Duration timeout = const Duration(seconds: 15),
}) async {
if (_completer != null) {
return _completer!.future;
}
_completer = Completer<void>();
try {
final value = purchase.value;
if (value == null) {
throw Exception(
"Purchase information is empty. Please run [create] method.",
);
}
final modelQuery = collection(userId: userId).modelQuery;
final purchaseCollection = StripePurchaseModelCollection(
modelQuery.equal(StripePurchaseModelKeys.orderId.name, value.orderId),
);
final functionsAdapter =
StripePurchaseMasamuneAdapter.primary.functionsAdapter ??
FunctionsAdapter.primary;
await functionsAdapter.execute(
StripeDeleteSubscriptionAction(
orderId: value.orderId,
),
);
await Future.doWhile(() async {
await Future.delayed(const Duration(milliseconds: 100));
await purchaseCollection.reload();
return purchaseCollection.every(
(element) =>
element.value != null && element.value!.cancelAtPeriodEnd,
);
}).timeout(timeout);
_completer?.complete();
_completer = null;
notifyListeners();
} catch (e) {
_completer?.completeError(e);
_completer = null;
rethrow;
} finally {
_completer?.complete();
_completer = null;
}
}