presentUpsell method
Future<String?>
presentUpsell({
- required BuildContext context,
- required String trigger,
- PaywallEventHandlers? eventHandlers,
- Map<
String, dynamic> ? customPaywallTraits, - bool? dontShowIfAlreadyEntitled,
- void onEntitled()?,
override
Presents view based on trigger
Implementation
@override
Future<String?> presentUpsell({
required BuildContext context,
required String trigger,
PaywallEventHandlers? eventHandlers,
Map<String, dynamic>? customPaywallTraits,
bool? dontShowIfAlreadyEntitled,
void Function()? onEntitled,
void Function()? onPaywallUnavailable,
}) async {
_fallbackContext = context;
// Store current event handlers and presentation callbacks
_currentEventHandlers = eventHandlers;
_currentOnEntitled = onEntitled;
_currentOnPaywallUnavailable = onPaywallUnavailable;
try {
final result = await methodChannel.invokeMethod<String?>(
presentUpsellMethodName,
{
'trigger': trigger,
'customPaywallTraits': _convertBooleansToMarkers(customPaywallTraits),
'dontShowIfAlreadyEntitled': dontShowIfAlreadyEntitled,
},
);
return result;
} on PlatformException catch (e) {
log('[Helium] Unexpected present upsell error: ${e.message}');
_currentEventHandlers = null;
_currentOnEntitled = null;
_currentOnPaywallUnavailable = null;
try {
await methodChannel.invokeMethod<String?>(
fallbackOpenEventMethodName,
{
'trigger': trigger,
'viewType': 'presented',
'paywallUnavailableReason': 'bridgingError',
},
);
} catch (err) {
log('[Helium] Failed to send fallback open event: $err');
}
_showFallbackSheet(trigger);
// Helium paywall could not be shown; signal the caller regardless of
// whether the Flutter fallback view is displayed.
_safeInvokeCallback(onPaywallUnavailable, 'onPaywallUnavailable');
return "Failed to present upsell: '${e.message}'.";
}
}