Use this guide to identify the failing step before changing unrelated settings.
Start with the Quickstart, then use each feature's
reference for exact types and platform differences.
Await Storyteller.initialize(...) and inspect success and message. Confirm
that the API key belongs to the intended Storyteller tenant and that the device
can reach the service. Mount/load Storyteller widgets after success. A
MissingPluginException points to a native-plugin build/registration issue:
rebuild the supported Android/iOS app after adding plugins, and resolve iOS pods.
A Flutter web/desktop target does not contain these native implementations.
Use onDataLoadComplete(success, error, dataCount) to distinguish an error from
a successful zero-item response. Check that the category or collection belongs
to the same tenant and that its content is published and currently available.
Give row/player widgets a nonzero bounded layout. A controller reload Future is
not the network-load result. See List Components,
Cards and Embedded Clips for their distinct callback
and sizing contracts.
A method or callback behaves differently by platform#
Check the selected package/native version and the platform notes in
Additional Methods, Event Streams
and Embedded Clips. An exported Dart method or callback does
not establish that both native bridges implement it. Observe the documented
result/event rather than treating an acknowledged command as proof of a visible
native action.
StorytellerUserActivityEvent.type preserves the native wire name. For example,
use openedStory, not storyOpened. Subscribe through the SDK's analytics stream
and cancel the subscription when its owner is disposed. Check tracking options,
platform delivery and version availability in Analytics.
Watch-time event delivery starts in 12.1.2; see the Changelog.
Use the exported Dart types and supported mappings in Themes.
Check local theme versus global theme, the target surface, platform availability
and the current bridge limitations. Native SDK catalogue entries can belong to
remote/content configuration or fields the Flutter wrapper does not expose.
Google ads do not load, or the wrong provider serves#
Confirm application-level Google Mobile Ads configuration, ad-unit type/ID,
module setup before core initialization, and the selected GAM/AdMob facade. These
wrappers share the native Google Ads product. VAST registration is independent.
Consent-dependent PPID/KVPs, valid inventory and network fill also matter. Use
Ads for exact configuration and supported diagnostics; a missing fill
alone does not establish an SDK integration failure.
A public Showcase link does not describe my installed version#
The Showcase is a separate application and its
public main can move independently. Compare your installed package version
and Changelog, and follow the Showcase README for that app's
setup. Share the SDK version, platform, failing step and a minimal reproduction
with [email protected] when requesting help.
{"slug": "troubleshooting", "page_title": "Troubleshooting", "page_url": "Troubleshooting/", "canonical_url": "/flutter/Troubleshooting/", "markdown": "# Troubleshooting\n\nUse this guide to identify the failing step before changing unrelated settings.\nStart with the [Quickstart](getting-started/index.md), then use each feature's\nreference for exact types and platform differences.\n\n## Initialization fails\n\nAwait `Storyteller.initialize(...)` and inspect `success` and `message`. Confirm\nthat the API key belongs to the intended Storyteller tenant and that the device\ncan reach the service. Mount/load Storyteller widgets after success. A\n`MissingPluginException` points to a native-plugin build/registration issue:\nrebuild the supported Android/iOS app after adding plugins, and resolve iOS pods.\nA Flutter web/desktop target does not contain these native implementations.\n\n## Initialization succeeds but a list is empty\n\nUse `onDataLoadComplete(success, error, dataCount)` to distinguish an error from\na successful zero-item response. Check that the category or collection belongs\nto the same tenant and that its content is published and currently available.\nGive row/player widgets a nonzero bounded layout. A controller reload Future is\nnot the network-load result. See [List Components](StorytellerListViews.md),\n[Cards](Cards.md) and [Embedded Clips](EmbeddedClips.md) for their distinct callback\nand sizing contracts.\n\n## A method or callback behaves differently by platform\n\nCheck the selected package/native version and the platform notes in\n[Additional Methods](AdditionalMethods.md), [Event Streams](StorytellerDelegate.md)\nand [Embedded Clips](EmbeddedClips.md). An exported Dart method or callback does\nnot establish that both native bridges implement it. Observe the documented\nresult/event rather than treating an acknowledged command as proof of a visible\nnative action.\n\n## An analytics handler never matches an event\n\n`StorytellerUserActivityEvent.type` preserves the native wire name. For example,\nuse `openedStory`, not `storyOpened`. Subscribe through the SDK's analytics stream\nand cancel the subscription when its owner is disposed. Check tracking options,\nplatform delivery and version availability in [Analytics](Analytics.md).\nWatch-time event delivery starts in `12.1.2`; see the [Changelog](Changelog.md).\n\n## Theme changes are ignored or look different\n\nUse the exported Dart types and supported mappings in [Themes](Themes.md).\nCheck local theme versus global theme, the target surface, platform availability\nand the current bridge limitations. Native SDK catalogue entries can belong to\nremote/content configuration or fields the Flutter wrapper does not expose.\n\n## Google ads do not load, or the wrong provider serves\n\nConfirm application-level Google Mobile Ads configuration, ad-unit type/ID,\nmodule setup before core initialization, and the selected GAM/AdMob facade. These\nwrappers share the native Google Ads product. VAST registration is independent.\nConsent-dependent PPID/KVPs, valid inventory and network fill also matter. Use\n[Ads](Ads.md) for exact configuration and supported diagnostics; a missing fill\nalone does not establish an SDK integration failure.\n\n## A public Showcase link does not describe my installed version\n\nThe [Showcase](getting-started/examples.md) is a separate application and its\npublic `main` can move independently. Compare your installed package version\nand [Changelog](Changelog.md), and follow the Showcase README for that app's\nsetup. Share the SDK version, platform, failing step and a minimal reproduction\nwith **[email protected]** when requesting help.\n", "copy_markdown_include_header": false, "base_path": "", "ai_dir": "ai", "missing_payload_behavior": "empty"}