appstack_plugin pub.dev package. For installation and
integration guidance, see the Flutter SDK guide.
Current stable release: 2.10.0, published 16 September 2026. See the changelog for everything that changed.
AppstackPlugin
All members are static. Every method returns aFuture, except
getAttributionParamsWithCallback(), which
returns a Stream.
configure()
customerUserId, so use
setCustomerUserId() to set the ID later.
Throws ArgumentError when apiKey is empty or logLevel falls outside 0 to 3.
String
required
Your app’s Appstack API key, from the dashboard under app settings.
int
default:"1"
Console verbosity, descending:
0 DEBUG, 1 INFO, 2 WARN, 3 ERROR. iOS has
no dedicated WARN tier, so 2 behaves like 3 there.String?
default:"null"
Your identifier for the signed-in user, when known at startup.
Deprecated parameters
Deprecated parameters
Both are still accepted and have no effect. Each logs a warning when used, and
will be removed in a future release.
bool
The native debug overlay was removed from the Appstack SDKs. Use
logLevel: 0
for verbose logging instead.String?
The custom endpoint override was removed from the public API. The dev proxy is
now applied natively from a repo-only host-app key.
setCustomerUserId()
configure(). Callable at any
time; last write wins.
String?
required
Your identifier for the signed-in user. Set it as soon as it is known, and at
least one event has to follow for it to take effect.
sendEvent()
String?
default:"null"
The event name, for
EventType.custom.Map<String, dynamic>?
default:"null"
Event properties. For revenue events send
revenue and currency.Future<bool>
Resolves
true when the event was sent successfully.Custom parameter values may be encrypted on the device before they are sent, so
avoid relying on them being readable in raw payload inspection. This is driven
entirely by remote config, with nothing to set here, and keys the backend needs in
the clear (
currency, revenue, campaign fields) are excluded. Revenue reporting
is unaffected.getAppstackId()
Future<String?>
The install’s Appstack ID, or
null when not available.isSdkDisabled()
configure() to verify that
configuration succeeded.
Future<bool>
true when the SDK is disabled, for example because the API key is invalid.getAttributionParams()
getAttributionParamsWithCallback() when
attribution retrieval time may vary.
Future<Map<String, dynamic>?>
Attribution parameters, or
null when none are available.On iOS the map always contains
appstack_match_status, describing the attribution
outcome: matched, matched_no_params, organic, skipped, failed or
not_configured. Only failed is worth retrying. Android does not send that key
yet, so keep treating an empty map as “nothing yet”.getAttributionParamsWithCallback()
Stream<Map<String, dynamic>?>
A single-value stream of attribution parameters.
handleUniversalLink()
configure().
Throws ArgumentError when allowedHosts contains a blank hostname.
Uri
required
The tapped link.
Set<String>?
default:"null"
Hosts to accept. A link on any other host returns
null. Omit to accept any host.Future<AppstackLinkResult?>
The parsed link, or
null for unsupported links.enableAppleAdsAttribution()
Future<bool>
Resolves
true when attribution was enabled successfully.deleteUserData()
Types
AppstackLinkResult
String?
The link’s single path segment. Optional in both native SDKs, so it is nullable
here rather than collapsed to an empty string.
Map<String, String>
Query parameters parsed off the tapped URL.
Uri
The URL that was handled.
EventType
EventType.addToCart becomes
"ADD_TO_CART". Where two names are synonymous, both are provided for compatibility
with existing integrations.
install is tracked by the SDK itself. Passing it to sendEvent() has no effect:
both native SDKs discard a manual install event so it cannot inflate install
counts.EventTypeExtension
String
The SNAKE_CASE event name as sent over the wire.