adflow_flutter
Flutter plugin for the AdFlow ad-mediation library on top of AdMob: Interstitial, App Open, Rewarded, Native, and Banner ads. Android only for now.
2.2.0
wzlibs/adflow
What this package is like to depend on
Last release 1 months ago
16 Jul 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 13 of 13 stable releases
Nothing withdrawn
no release was ever pulled
1 months old
15 releases · first in 2026
15 releases in the last 12 months
see the full history below
Release timeline
15 releases · Jul 2026 to Jul 2026Releases
latest 15-
2.2.016 Jul 2026Release notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov1.0.0-alpha05. - Added
AdFlow.updateShowIntervalConfig()- lets the app change the minimum gap between Interstitial/App Open afterAdFlow.initialize()has already run (e.g. when the value comes from the app's own remote config and changes after init). Takes effect immediately on the nextcanShow()/show()check; does not reset any cooldown already in progress.
- Bump the underlying
-
2.1.015 Jul 2026Release notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov1.0.0-alpha04. - SDK init (
MobileAds.initialize()) now depends only on consent (canRequestAds()), no longer waits for first-foreground - can run as early asApplication.onCreate()if consent already resolved from a previous session. - Behavior change:
preload = trueno longer auto-loads a placement duringAdFlow.initialize(). The firstload()for Interstitial/Rewarded must now always be app-driven; Banner/Native are unaffected (still self-load when their view attaches).preloadstill governs auto-loading the next ad after the current one is consumed (show/release()) - that part is unchanged.autoShowOnForeground(App Open) is unaffected end-to-end - it now also triggers its ownload()when not ready, so it keeps working with no app-side change. - Fix:
FullScreenAd.awaitReady()(Interstitial/App Open/Rewarded) now triggers its ownload()like the Dart-side contract already implied, instead of only waiting for an already-in-flight load. Previously, callingawaitReady()on a placement withpreload = false(or before anything else had loaded it) would hang until timeout since nothing was requesting the ad. - Fix: a
.load()call blocked byCONSENT_REQUIRED(e.g. called before the UMP form resolves) is no longer silently dropped - it's now retried automatically once consent is granted, instead of requiring the app to listen foronError/blocked callbacks and retry manually.
- Bump the underlying
-
2.0.013 Jul 2026Release notes
Open source →- Added
AdFlowCollapsibleNative- shows a native ad with a close button that switches the same slot to a banner ad (also triggered automatically if the native ad fails to load), composingAdFlowNative/AdFlowBannerdirectly with no separate platform view. - BREAKING: removed the global
AdFlow.setAdsEnabled(bool). Restored the v1 per-placementsetEnabled(bool)instead, now on every ad handle (AdFlowInterstitialAd/AdFlowAppOpenAd/AdFlowRewardedAd/AdFlowBannerAd/AdFlowNativeAd) - toggling one placement no longer forces every other placement off too, e.g. a "premium" toggle can leave a rewarded placement showing while disabling everything else. Noadflow-corechange needed - both the old global flag and the new per-placement map work by feedingloadWhen/showWhen(already-existing nativeAdRulehooks), just scoped differently. - Added
onLoading/onLoaded/onErrortoAdFlowNative/AdFlowBanner- side-effect callbacks (safe to callsetState()inside them) that fire alongside the existingloading/failedwidget builders, which run during Flutter's build phase and are not a safe place for side effects. - Bump the underlying
adflow-core/adflow-admobdependency tov1.0.0-alpha03(internal fix:AppOpenForegroundObservernow defers entirely toAppOpenAd.canShowinstead of duplicating a subset of its checks - no API change).
- Added
-
1.0.013 Jul 2026Release notes
Open source →- First stable release of the state-first rewrite (was published as
1.0.0-alpha.1/1.0.0-alpha.2prereleases). No API change from1.0.0-alpha.2- see that entry below for what it added over1.0.0-alpha.1.
- First stable release of the state-first rewrite (was published as
-
1.0.0-alpha.213 Jul 2026 pre-releaseRelease notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov1.0.0-alpha02. - Added
canShow()toAdFlowInterstitialAd/AdFlowAppOpenAd/AdFlowRewardedAd- a synchronous, side-effect-free query for whether callingshow()right now would actually proceed (accounts forshowRule, the minimum interval between full-screen shows, and whether another full-screen ad is currently showing, in addition to whether the ad is loaded). Not available on Banner/Native- those ad types have no such gates on the native side either.
- Bump the underlying
-
1.0.0-alpha.111 Jul 2026 pre-releaseRelease notes
Open source →- Breaking rewrite for AdFlow native
v1.0.0-alpha01. - Declare all placements once through
AdFlow.initialize; removed v1 manager creation and per-placementsetEnabledAPIs. - Added reactive
AdStatelistenables,awaitReady, and unified full-screen show callbacks. - Added self-managing
AdFlowBannerandAdFlowNativewidgets. Polling, blocked flags, generation keys, and manual native view rebinding are no longer required. - Added global
AdFlow.setAdsEnabled, state streaming through Pigeon, v2 block reasons, and v2 native renderer support.
- Breaking rewrite for AdFlow native
-
0.5.009 Jul 2026Release notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov0.7.0.showRuleon a Native/Banner placement now actually blocks rendering (previously ignored - only Interstitial/App Open/Rewarded honored it). Both the "not loaded yet" and "showRule rejected" cases now report throughAdFlowNativeAdView.onShowBlocked/AdFlowBannerAdView.onShowBlockedinstead of one of them throwing, so ashowRulerejection after an ad was already cached can no longer crash the app. AdFlowNativeAdView/AdFlowBannerAdViewno longer need anisReady/readiness check before building the widget - call them directly and useonShowBlockedto hide/retry if blocked. Seeexample/lib/home_screen.dart(_retryWhileBlocked) for the recommended pattern. No breaking API change -onShowBlockedis a new optional callback.
- Bump the underlying
-
0.4.209 Jul 2026Release notes
Open source →- Fix:
setEnabled(false)only blockedshow()for Interstitial/App Open/Rewarded, and had no effect at all on Banner/Native -load()kept fetching ads in the background for every ad type, and Banner/Native platform views kept rendering the cached ad regardless ofsetEnabled(). NowsetEnabled(false)consistently blocks bothload()and rendering for every ad type, so a fully "disabled" placement (e.g. a VIP/premium user) stops making ad requests entirely instead of just hiding the show/UI surface. No API change - samesetEnabled(bool)call.
- Fix:
-
0.4.109 Jul 2026Release notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov0.6.0, which renders the native ad icon inDefaultSmallNativeAdRenderer(previously headline + body only, no image). No Dart API change.
- Bump the underlying
-
0.3.208 Jul 2026Release notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov0.5.0, which makes the default retry policy retry indefinitely on no-fill instead of giving up after 5 attempts (backoff still caps at 60s/attempt). A placement no longer gets permanently stuck failed for the rest of the session just because the ad network no-filled a few times in a row. No Dart API change.
- Bump the underlying
-
0.3.108 Jul 2026Release notes
Open source →- Fix:
show()onAdFlowInterstitialAd/AdFlowAppOpenAd/AdFlowRewardedAdcould hang forever (the returnedFuture<void>never completing) when called with noActivitycurrently attached (e.g. a screen rotation or the app briefly backgrounded betweenload()finishing andshow()being called), or when the placement had no underlying native manager registered. Both cases now reportonShowBlocked(BlockReason.notReady)instead of silently doing nothing, so the awaited Future always resolves.
- Fix:
-
0.3.008 Jul 2026Release notes
Open source →AdFlowNativeAd.reload(): force-fetch a new native ad even while the currently cached one is still within its expiry window (load()no-ops in that case). Bumps the underlyingadflow-core/adflow-admobdependency tov0.4.0. Does not rebind any already-builtAdFlowNativeAdView- recreate the widget (e.g. bump itsKey) oncereload()resolves successfully to pick up the new ad. If the reload fails, the previously cached ad is left in place. See README "Hiển thị từng loại ad" section for the recommended integration point (RouteAware.didPopNext()).
-
0.2.108 Jul 2026Release notes
Open source →- Bump the underlying
adflow-core/adflow-admobdependency tov0.3.0, which renames the default Logcat tag (was"AdFlow", clashed with the app's own package name in logcat output; now"AdFlowSDK"). No Dart API change.
- Bump the underlying
-
0.2.007 Jul 2026Release notes
Open source →- GDPR/consent support (Google UMP), exposed on
AdFlowCore:getConsentStatus(),getPrivacyOptionsRequirement(),canRequestAds(),requestConsentIfNeeded(),showPrivacyOptionsForm().requestConsentIfNeeded()accepts an optionaldebugGeography/testDeviceHashedIdsto test the EEA flow without rebuilding a native-only app. - No app-side change required for existing
load()calls - they already respect consent automatically (see README).
- GDPR/consent support (Google UMP), exposed on
-
0.1.007 Jul 2026Release notes
Open source →Initial release. Android only - iOS not implemented yet.
- Interstitial, App Open, Rewarded, Native, and Banner ad support, bridged to the underlying
adflow-core/adflow-admobKotlin libraries via Pigeon. AdFlowCore.initialize()for one-time setup (show-interval config, revenue logging).AdFlowInterstitialAd,AdFlowAppOpenAd,AdFlowRewardedAd,AdFlowBannerAd,AdFlowNativeAdfacades, plusAdFlowBannerAdView/AdFlowNativeAdViewwidgets backed byAndroidView.setEnabled()per placement as a runtime on/off switch (e.g. for premium/remove-ads users).- App Open auto-show on foreground via
enableAutoShowOnForeground().
- Interstitial, App Open, Rewarded, Native, and Banner ad support, bridged to the underlying