Skip to main content
Supported on: iOS SDK 1.0.61+ · Android SDK 1.0.33+ · Flutter SDK 1.0.3+
This is the complete reference for all public methods, properties, types, and delegate classes in the appdna_sdk Flutter package. The Flutter SDK delegates rendering, business logic, and storage to the native iOS and Android layers, so every method here resolves to native execution under the hood.

Core Methods

All core methods are static on the AppDNA class.

Config Methods

Session Data Methods

Cross-module key-value bag used by Console-configured template interpolation ({{session.*}}).

Experiment Methods

Push Methods (Static)

These static helpers mirror AppDNA.push.* — use either style.

Presentation Methods

Web Entitlements


Module Namespaces

Access module-specific functionality through these static properties on AppDNA.

AppDNAPushModule

AppDNABilling

AppDNAOnboardingModule

AppDNAPaywallModule

AppDNARemoteConfigModule

AppDNAFeaturesModule

AppDNAExperimentsModule

AppDNAInAppMessagesModule

AppDNASurveysModule

AppDNADeepLinksModule

AppDNAScreenModule


Properties


Delegate Abstract Classes

Implement these abstract classes and register them with the corresponding module’s setDelegate(...). Every setDelegate accepts a nullable delegate — pass null to clear.

AppDNAOnboardingDelegate

AppDNAPaywallDelegate

AppDNAPushDelegate

AppDNABillingDelegate

AppDNAInAppMessageDelegate

shouldShowMessage is a veto — return false to suppress display before view construction and analytics.

AppDNASurveyDelegate

AppDNADeepLinkDelegate

shouldOpen is a veto — return false to suppress default deep-link handling (e.g., defer until the user has signed in).

AppDNAScreenDelegate

onScreenAction is a veto — return false to intercept the action and prevent default handling.

Key Types

AppDNAEnvironment

AppDNAOptions

AppDNALogLevel

AppDNABillingProvider

AppDNABillingProvider is a class (not an enum): value-less providers are static consts, while adapty is a factory carrying the Adapty public SDK key.

onBeforeStepAdvance result (a Map)

onBeforeStepAdvance returns a plain Map<String, dynamic> — there is no StepAdvanceResult Dart class. An empty map (or {'type': 'proceed'}) means “advance normally”. The conceptual shapes:

onBeforeStepRender result (a Map)

onBeforeStepRender returns a Map<String, dynamic>? — there is no StepConfigOverride Dart class. Return null for no override, or a map of the fields to override:

PaywallAction values

There is no PaywallAction Dart class. The action argument passed to AppDNAPaywallDelegate.onPaywallAction(paywallId, action) is a plain String, one of:

DismissReason values

There is no DismissReason Dart class. The native SDK reports a dismiss reason in analytics events; on Flutter you receive the lifecycle via onPaywallDismissed. The reported string values are:

Screen dismissal result (a Map)

AppDNA.screen.show(...) returns Future<void>. The result is delivered to your AppDNAScreenDelegate.onScreenDismissed(screenId, result) as a Map<String, dynamic> with this shape:

Flow completion result (a Map)

AppDNA.screen.showFlow(...) returns Future<void>. The result is delivered to your AppDNAScreenDelegate.onFlowCompleted(flowId, result) as a Map<String, dynamic> with this shape:

LocationData

Result of AppDNA.deepLinks.getLocationData(String fieldId) — the location a user picked for an onboarding location field:

PaywallContext

OnboardingContext

Push notification payload (a Map)

There is no public PushPayload Dart class. The notification argument delivered to the AppDNAPushDelegate callbacks (onPushReceived / onPushTapped) is a raw Map<String, dynamic> with camelCase keys:

Entitlement

PurchaseResult

ProductInfo

WebEntitlement

SurveyResult

SurveyAnswer


Notes

Architecture

The Flutter package exposes API facades, DTOs, and platform-channel bridges; rendering, business logic, network I/O, and storage execute in the native iOS (Swift) and Android (Kotlin) SDKs. New native behavior reaches Flutter via mechanical codegen — the Dart API surface stays continuously in sync with the native ones.

Versioning

The Dart API surface stays continuously in sync with the bundled native renderer through mechanical codegen. CI enforces that the published Flutter package, the iOS SDK, and the Android SDK all advance together — every Flutter release ships with the matching renderer baked in. See the supported-versions box at the top of this page for the active versions.

Platform-specific behavior

  • AppDNABillingProvider.storeKit2 and AppDNABillingProvider.revenueCat apply on iOS only. On Android, billing always uses Google Play Billing.
  • requestPermission() on AppDNAPushModule triggers the iOS APNs permission prompt or the Android 13+ POST_NOTIFICATIONS runtime permission.
  • shutdown() releases native resources on Android. On iOS it is a no-op.
  • offerToken on purchase(...) is required for Android subscription offers (base-plan tokens) and ignored on iOS.