NewYour coding agent can read the release notes before it upgrades.Set up the MCP server β
pub.dev
Kids Mode (COPPA / App Store Kids Category) variant of adapty_flutter. iOS compiles out IDFA / AdSupport via the AdaptySDK-iOS KidsMode trait; same public API.
Last release 15 days ago
23 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 6 of 6 stable releases
1 version withdrawn
withdrawn after publishing
2 months old
7 releases Β· first in 2026
One column per month.
AdaptyCustomAsset.linearGradient accepts AlignmentDirectional and mixed begin / end values, resolved left-to-right. Before, the flow failed to open wi
AdaptyCustomAsset.linearGradient accepts AlignmentDirectional and mixed begin/end values, resolved left-to-right. Before, the flow failed to open with a TypeError.AdaptyUI.createFlowView fails with an AdaptyError (wrongParam) naming a custom asset it can't encode, instead of a raw ArgumentError or JsonUnsupportedObjectError.transform, or a tileMode other than TileMode.clamp, on a custom LinearGradient is still ignored and now logs a warning.βοΈ Don't forget to update your local fallback file if needed.
Full Changelog: 4.1.0...4.1.1
External attribution APIs are renamed, with no deprecated aliases: .updateAttribution() is now .updateExternalAttribution() , AdaptyAttributionSourceβ¦
π See the migration guide for the full details.
.updateAttribution() is now .updateExternalAttribution(), AdaptyAttributionSource is now AdaptyExternalAttributionProvider, and AdaptyProfile.appliedAttributionSources is now appliedExternalAttributionProviders..withAdaptyAttributionEnabled(true) on your AdaptyConfiguration.AdaptyExternalAttributionProvider ships appleAds, adjust, appsflyer, branch, tenjin, and custom.Adapty().didReceivePromotedPurchaseStream; complete it with .makePromotedPurchase(). While nothing is subscribed to that stream, the SDK completes the purchase itself. Requires iOS 16.4 or later.AdaptyUI.dismissFlowView and AdaptyUIFlowView.dismiss accept destroy: false to keep the view alive after dismissing it: presenting it again resumes on the screen the user left. The default destroy: true releases the view as before.preloadProducts had no effect on AdaptyUI.createFlowView.flowViewDidReceiveAnalyticEvent as numbers; before, every 0/1 arrived as false/true.βοΈ Don't forget to update your local fallback file if needed.
Full Changelog: 4.0.4...4.1.0
π See the migration guide for the full details.
.updateAttribution() is now .updateExternalAttribution(), AdaptyAttributionSource is now AdaptyExternalAttributionProvider, and AdaptyProfile.appliedAttributionSources is now appliedExternalAttributionProviders..withAdaptyAttributionEnabled(true) on your AdaptyConfiguration.AdaptyExternalAttributionProvider ships appleAds, adjust, appsflyer, branch, tenjin, and custom.Adapty().didReceivePromotedPurchaseStream; complete it with .makePromotedPurchase(). While nothing is subscribed to that stream, the SDK completes the purchase itself. Requires iOS 16.4 or later.AdaptyUI.dismissFlowView and AdaptyUIFlowView.dismiss accept destroy: false to keep the view alive after dismissing it: presenting it again resumes on the screen the user left. The default destroy: true releases the view as before.preloadProducts had no effect on AdaptyUI.createFlowView.flowViewDidReceiveAnalyticEvent as numbers; before, every 0/1 arrived as false/true.Native dependencies in this release: iOS 4.1.3, Android 4.1.1 (crossplatform 4.1.5).
βοΈ Don't forget to update your local fallback file.
Full Changelog: https://github.com/adaptyteam/AdaptySDK-Flutter/compare/4.0.4...4.1.0
[Android] restorePurchases() no longer throws when there is nothing to restore. It now completes successfully with the current AdaptyProfile β check t
restorePurchases() no longer throws when there is nothing to restore. It now completes successfully with the current AdaptyProfile β check the access level in the returned profile instead of catching an error. If your code treats a failed restore as "nothing to restore", that branch will no longer be reached on Android.text_color and text_background keys. The old color and background keys are still read, so views built before the change keep rendering as they did. Affected both platforms.AdaptyErrorCode.noPurchasesToRestore β no longer returned on Android. Check the access level status in the profile returned by restorePurchases().Native dependencies in this release: iOS 4.0.3, Android 4.0.2.
βοΈ Don't forget to update your local fallback file if needed.
Full Changelog: 4.0.3...4.0.4
restorePurchases() no longer fails with noPurchasesToRestore when there is nothing to restore. It now completes successfully with the current AdaptyProfile β check the access level status in the returned profile instead of catching an error. AdaptyErrorCode.noPurchasesToRestore is deprecated on Android.text_color and text_background keys. The old color and background keys are still read, so views built before the change keep rendering as they did. Fixed on both platforms.4.0.3.4.0.2.The locale argument of getFlow and getFlowForDefaultAudience has had no effect on flows since 4.0.0. It is now deprecated and logs a warning instead oβ¦
AdaptyUI.createFlowView and AdaptyUIFlowPlatformView now accept a locale β the localization the flow view is rendered with. Since 4.0.0 a flow is localized when its view is built, and there was no way to choose that localization from Dart.
Without a locale the view is rendered in en, falling back to the flow's default localization when the flow has no en. Asking for a localization the flow does not have falls back to the flow default as well, without an error. Strings missing from the chosen localization are filled in from the default one.
AdaptyUIFlowView now reports the locale the view was actually built with, so you can tell which localization was applied.
LinearGradient had no explicit stops β the idiomatic LinearGradient(colors: [a, b]) reached the native side with no colors at all. Affected both platforms.locale argument of getFlow and getFlowForDefaultAudience has had no effect on flows since 4.0.0. It is now deprecated and logs a warning instead of being dropped silently β pass the locale to createFlowView or AdaptyUIFlowPlatformView instead.Native dependencies in this release: iOS 4.0.2, Android 4.0.1.
Full Changelog: 4.0.2...4.0.3
AdaptyUI.createFlowView and AdaptyUIFlowPlatformView now accept a locale β the localization the flow view is rendered with. Since 4.0.0 a flow is localized when its view is built, and there was no way to choose that localization from Dart. Requires the native iOS 4.0.2 and Android 4.0.1 releases.
Without a locale the view is rendered in en, falling back to the flow's default localization when the flow has no en. Asking for a localization the flow does not have falls back to the flow default as well, without an error. Strings missing from the chosen localization are filled in from the default one.
AdaptyUIFlowView now reports the locale the view was actually built with, so you can tell which localization was applied. It is null when paired with an older native SDK.
The locale argument of getFlow and getFlowForDefaultAudience has had no effect on flows since 4.0.0. It is now marked deprecated and logs a warning instead of being silently dropped; pass the locale to createFlowView or AdaptyUIFlowPlatformView instead.
Fixed custom gradient assets losing all of their colors when the LinearGradient had no explicit stops. Affected both platforms.
The "paywall" concept is generalized into flow ; most Paywall / paywall symbols are renamed to Flow / flow , and previously deprecated aliases are remβ¦
freed pointer was not the last allocation) when a placement was served from cache, on Xcode 26.3 / Swift 6.2.4 release builds.adapty_flutter_kids no longer imports AppTrackingTransparency β the native ATT surface is now fully compiled out under the kids trait.Native iOS SDK dependency is pinned to 4.0.1 in this release.
Full Changelog: 4.0.1...4.0.2
β οΈ Major release with breaking API changes. The "paywall" concept is generalized into flow; most
Paywall/paywallsymbols are renamed toFlow/flow, and previously deprecated aliases are removed.
4.0.0 introduces Flow, which replaces the Paywall as the core unit of presentation and analytics. A flow can contain multiple screens, with its rendering, navigation, and analytics driven by the new flow runtime.
π Read more about Adapty Flow Builder.
π See the migration guide to move from 3.x.
flutter config --enable-swift-package-manager; Flutter 3.44+ enables it by default.AdaptyPaywall is split into AdaptyFlow (+ AdaptyFlowPaywall); AdaptyUIPaywallView β AdaptyUIFlowView; Adapty().getPaywall(...) β getFlow(...) and getPaywallForDefaultAudience(...) β getFlowForDefaultAudience(...); AdaptyUI().createPaywallView(...) β createFlowView(...); logShowPaywall(...) β logShowFlow(...).AdaptyUIPaywallsEventsObserver β AdaptyUIFlowsEventsObserver (setPaywallsEventsObserver β setFlowsEventsObserver); all paywallViewDid* callbacks β flowViewDid*. The separate rendering-failure callback is folded into flowViewDidReceiveError.AdaptyPaywallViewConfiguration is no longer exposed; the view configuration is now opaque.Adapty.setFallbackPaywalls() (use setFallback()), AdaptyConfigurationBuilder.withIdfaCollectionDisabled() (use withAppleIdfaCollectionDisabled()), AdaptyFlow.placementId / AdaptyFlow.revision (use placement.id / placement.revision), AdaptyPurchaseResultSuccess.jwsTransaction (use appleJwsTransaction), and AdaptyUIFlowView.paywallVariationId (use variationId).AndroidSystemBackAction in your events observer if you want it to close the flow.AdaptyUISystemRequestsHandler β handle flow system requests (OS permission prompts and App Store review requests) triggered by flow actions. Register via AdaptyUI().setSystemRequestsHandler(...).AdaptyUIObserverModeResolver β drive purchases and restores initiated from flows while running in Observer Mode. Register via AdaptyUI().setObserverModeResolver(...).flowViewDidReceiveAnalyticEvent β receive customer-facing analytic events emitted by a flow.Adapty.openWebPaywall and Adapty.createWebPaywallUrl now accept an AdaptyFlowPaywall in addition to an AdaptyPaywallProduct.setFlowsEventsObserver / setOnboardingsEventsObserver now accept null to detach a previously set observer, so the SDK no longer retains it (useful for cleanup).AdaptyOnboarding, AdaptyUIOnboardingView, AdaptyUIOnboardingPlatformView, AdaptyUIOnboardingsEventsObserver, the onboarding state / input / analytics models, and the related Adapty / AdaptyUI methods (getOnboarding, getOnboardingForDefaultAudience, create/present/dismissOnboardingView, register/unregister/setOnboardingsEventsObserver) are now annotated @Deprecated.Full Changelog: 3.17.1...4.0.0
freed pointer was not the last allocation) when a placement was served from cache, on Xcode 26.3 / Swift 6.2.4 release builds.adapty_flutter_kids no longer imports AppTrackingTransparency β the native ATT surface is now fully compiled out under the kids trait.4.0.1.The "paywall" concept is generalized into flow ; most Paywall / paywall symbols are renamed to Flow / flow , and previously deprecated aliases are remβ¦
Full Changelog: 4.0.0...4.0.1
β οΈ Major release with breaking API changes. The "paywall" concept is generalized into flow; most
Paywall/paywallsymbols are renamed toFlow/flow, and previously deprecated aliases are removed.
4.0.0 introduces Flow, which replaces the Paywall as the core unit of presentation and analytics. A flow can contain multiple screens, with its rendering, navigation, and analytics driven by the new flow runtime.
π Read more about Adapty Flow Builder.
π See the migration guide to move from 3.x.
flutter config --enable-swift-package-manager; Flutter 3.44+ enables it by default.AdaptyPaywall is split into AdaptyFlow (+ AdaptyFlowPaywall); AdaptyUIPaywallView β AdaptyUIFlowView; Adapty().getPaywall(...) β getFlow(...) and getPaywallForDefaultAudience(...) β getFlowForDefaultAudience(...); AdaptyUI().createPaywallView(...) β createFlowView(...); logShowPaywall(...) β logShowFlow(...).AdaptyUIPaywallsEventsObserver β AdaptyUIFlowsEventsObserver (setPaywallsEventsObserver β setFlowsEventsObserver); all paywallViewDid* callbacks β flowViewDid*. The separate rendering-failure callback is folded into flowViewDidReceiveError.AdaptyPaywallViewConfiguration is no longer exposed; the view configuration is now opaque.Adapty.setFallbackPaywalls() (use setFallback()), AdaptyConfigurationBuilder.withIdfaCollectionDisabled() (use withAppleIdfaCollectionDisabled()), AdaptyFlow.placementId / AdaptyFlow.revision (use placement.id / placement.revision), AdaptyPurchaseResultSuccess.jwsTransaction (use appleJwsTransaction), and AdaptyUIFlowView.paywallVariationId (use variationId).AndroidSystemBackAction in your events observer if you want it to close the flow.AdaptyUISystemRequestsHandler β handle flow system requests (OS permission prompts and App Store review requests) triggered by flow actions. Register via AdaptyUI().setSystemRequestsHandler(...).AdaptyUIObserverModeResolver β drive purchases and restores initiated from flows while running in Observer Mode. Register via AdaptyUI().setObserverModeResolver(...).flowViewDidReceiveAnalyticEvent β receive customer-facing analytic events emitted by a flow.Adapty.openWebPaywall and Adapty.createWebPaywallUrl now accept an AdaptyFlowPaywall in addition to an AdaptyPaywallProduct.setFlowsEventsObserver / setOnboardingsEventsObserver now accept null to detach a previously set observer, so the SDK no longer retains it (useful for cleanup).AdaptyOnboarding, AdaptyUIOnboardingView, AdaptyUIOnboardingPlatformView, AdaptyUIOnboardingsEventsObserver, the onboarding state / input / analytics models, and the related Adapty / AdaptyUI methods (getOnboarding, getOnboardingForDefaultAudience, create/present/dismissOnboardingView, register/unregister/setOnboardingsEventsObserver) are now annotated @Deprecated.Full Changelog: 3.17.1...4.0.0
4.0.0 (was from: "4.0.0"). The Flutter bridge targets this exact native version, so the plugin no longer resolves to newer 4.x native releases it wasn't built against.The "paywall" concept is generalized into flow ; most Paywall / paywall symbols are renamed to Flow / flow , and previously deprecated aliases are remβ¦
β οΈ Major release with breaking API changes. The "paywall" concept is generalized into flow; most
Paywall/paywallsymbols are renamed toFlow/flow, and previously deprecated aliases are removed.
4.0.0 introduces Flow, which replaces the Paywall as the core unit of presentation and analytics. A flow can contain multiple screens, with its rendering, navigation, and analytics driven by the new flow runtime.
π Read more about Adapty Flow Builder.
π See the migration guide to move from 3.x.
flutter config --enable-swift-package-manager; Flutter 3.44+ enables it by default.AdaptyPaywall is split into AdaptyFlow (+ AdaptyFlowPaywall); AdaptyUIPaywallView β AdaptyUIFlowView; Adapty().getPaywall(...) β getFlow(...) and getPaywallForDefaultAudience(...) β getFlowForDefaultAudience(...); AdaptyUI().createPaywallView(...) β createFlowView(...); logShowPaywall(...) β logShowFlow(...).AdaptyUIPaywallsEventsObserver β AdaptyUIFlowsEventsObserver (setPaywallsEventsObserver β setFlowsEventsObserver); all paywallViewDid* callbacks β flowViewDid*. The separate rendering-failure callback is folded into flowViewDidReceiveError.AdaptyPaywallViewConfiguration is no longer exposed; the view configuration is now opaque.Adapty.setFallbackPaywalls() (use setFallback()), AdaptyConfigurationBuilder.withIdfaCollectionDisabled() (use withAppleIdfaCollectionDisabled()), AdaptyFlow.placementId / AdaptyFlow.revision (use placement.id / placement.revision), AdaptyPurchaseResultSuccess.jwsTransaction (use appleJwsTransaction), and AdaptyUIFlowView.paywallVariationId (use variationId).AndroidSystemBackAction in your events observer if you want it to close the flow.AdaptyUISystemRequestsHandler β handle flow system requests (OS permission prompts and App Store review requests) triggered by flow actions. Register via AdaptyUI().setSystemRequestsHandler(...).AdaptyUIObserverModeResolver β drive purchases and restores initiated from flows while running in Observer Mode. Register via AdaptyUI().setObserverModeResolver(...).flowViewDidReceiveAnalyticEvent β receive customer-facing analytic events emitted by a flow.Adapty.openWebPaywall and Adapty.createWebPaywallUrl now accept an AdaptyFlowPaywall in addition to an AdaptyPaywallProduct.setFlowsEventsObserver / setOnboardingsEventsObserver now accept null to detach a previously set observer, so the SDK no longer retains it (useful for cleanup).AdaptyOnboarding, AdaptyUIOnboardingView, AdaptyUIOnboardingPlatformView, AdaptyUIOnboardingsEventsObserver, the onboarding state / input / analytics models, and the related Adapty / AdaptyUI methods (getOnboarding, getOnboardingForDefaultAudience, create/present/dismissOnboardingView, register/unregister/setOnboardingsEventsObserver) are now annotated @Deprecated.Full Changelog: 3.17.1...4.0.0
β οΈ Major release with breaking API changes. The "paywall" concept is generalized into "flow"; most
Paywall/paywallUI symbols are renamed toFlow/flow, and previously deprecated aliases are removed.
AdaptyPaywall is split into AdaptyFlow (+ AdaptyFlowPaywall); AdaptyUIPaywallView β AdaptyUIFlowView; Adapty().getPaywall(...) β getFlow(...) and getPaywallForDefaultAudience(...) β getFlowForDefaultAudience(...); AdaptyUI().createPaywallView(...) β createFlowView(...); logShowPaywall(...) β logShowFlow(...).AdaptyUIPaywallsEventsObserver β AdaptyUIFlowsEventsObserver (setPaywallsEventsObserver β setFlowsEventsObserver); all paywallViewDid* callbacks β flowViewDid*. The separate rendering-failure callback is folded into flowViewDidReceiveError.AdaptyPaywallViewConfiguration is no longer exposed; the view configuration is now opaque.Adapty.setFallbackPaywalls() (use setFallback()), AdaptyConfigurationBuilder.withIdfaCollectionDisabled() (use withAppleIdfaCollectionDisabled()), AdaptyFlow.placementId / AdaptyFlow.revision (use placement.id / placement.revision), AdaptyPurchaseResultSuccess.jwsTransaction (use appleJwsTransaction), and AdaptyUIFlowView.paywallVariationId (use variationId).AndroidSystemBackAction in your events observer if you want it to close the flow.flutter config --enable-swift-package-manager; Flutter 3.44+ enables it by default.AdaptyUISystemRequestsHandler β handle flow system requests (OS permission prompts and App Store review requests) triggered by flow actions. Register via AdaptyUI().setSystemRequestsHandler(...).AdaptyUIObserverModeResolver β drive purchases and restores initiated from flows while running in Observer Mode. Register via AdaptyUI().setObserverModeResolver(...).flowViewDidReceiveAnalyticEvent β receive customer-facing analytic events emitted by a flow.Adapty.openWebPaywall and Adapty.createWebPaywallUrl now accept an AdaptyFlow (uses the flow's first paywall variation) in addition to an AdaptyPaywallProduct.setFlowsEventsObserver / setOnboardingsEventsObserver now accept null to detach a previously set observer, so the SDK no longer retains it (useful for cleanup).AdaptyOnboarding, AdaptyUIOnboardingView, AdaptyUIOnboardingPlatformView, AdaptyUIOnboardingsEventsObserver, the onboarding state / input / analytics models, and the related Adapty/AdaptyUI methods (getOnboarding, getOnboardingForDefaultAudience, create/present/dismissOnboardingView, register/unregister/setOnboardingsEventsObserver) are now annotated @Deprecated.Your coding agent can read these notes before it upgrades. Set up the MCP server β