validateDiscountCode method
Future<InappifySdkResult<ValidateDiscountCodeData> >
validateDiscountCode(
- InappifyDiscountCodeRequest request
inherited
Validates a discount code for the active customer.
Implementation
@override
Future<InappifySdkResult<ValidateDiscountCodeData>> validateDiscountCode(
InappifyDiscountCodeRequest request,
) async {
final cancelled = _preCancelled<ValidateDiscountCodeData>(
'validateDiscountCode',
request.cancellation,
);
if (cancelled != null) return cancelled;
return _run<ValidateDiscountCodeData>(
'validateDiscountCode',
action: () async {
final requestedIdentifier = request.offeringIdentifier;
String? offeringIdentifier = requestedIdentifier;
if (offeringIdentifier == null) {
final currentRaw = await _bridge.call(
'getCurrentOffering',
positionalArguments: request.cancellation == null
? const <Object?>[]
: const <Object?>[<String, Object?>{}],
cancellation: request.cancellation,
injectAbortSignal: request.cancellation != null,
);
final current = currentRaw == null
? null
: InappifyWebPayloadCodec.offering(currentRaw);
offeringIdentifier = current?.identifier;
}
if (offeringIdentifier == null || offeringIdentifier.trim().isEmpty) {
throw const _WebSemanticException(
code: InappifyFailureCode.invalidConfiguration,
);
}
final raw = await _bridge.call(
'validateDiscountCode',
positionalArguments: <Object?>[
request.discountCode,
offeringIdentifier,
if (request.cancellation != null) const <String, Object?>{},
],
cancellation: request.cancellation,
injectAbortSignal: request.cancellation != null,
);
final result = InappifyWebPayloadCodec.discountValidation(raw);
if (requestedIdentifier != null &&
result.offering != null &&
result.offering!.identifier != requestedIdentifier) {
throw const FormatException(
'Web discount validation returned a different offering.',
);
}
return result;
},
cancellation: request.cancellation,
);
}