NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1620 most downloaded on pub.dev
Flutter plugin for age verification supporting Google Play Age Signals API (Android) and Apple's Age Range (DeclaredAgeRange) API (iOS 26+).
Last release today
06 Oct 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 19 of 19 stable releases
Nothing withdrawn
no release was ever pulled
10 months old
19 releases · first in 2025
One column per month.
Docs : Improved and shortened the README.
supervised instead of unknown.Full Changelog: 0.10.0...0.10.1
iOS : Added isEligibleForAgeFeatures() (iOS 26.2+), an opt-in wrapper for Apple's region check and the first step in Apple's documented flow . It is a
isEligibleForAgeFeatures() (iOS 26.2+), an opt-in wrapper for Apple's region check and the first step in Apple's documented flow. It is an optional pre-check you call yourself; nothing calls it automatically. Example in the README's Regional Eligibility section. Thanks @danielwilliamson for the PR (#36).false is Apple's current report, not a stable region flag.Full Changelog: 0.9.0...0.10.0
isEligibleForAgeFeatures() (iOS 26.2+), an opt-in wrapper for Apple's region check and the first step in Apple's documented flow. It is an optional pre-check you call yourself; nothing calls it automatically. Example in the README's Regional Eligibility section. Throws UnsupportedPlatformException below iOS 26.2, on pre-26.2 SDKs and on Android. Thanks @danielwilliamson for the PR (#36).false is Apple's current report, not a stable region flag.Fixed dartdoc references that never resolved. Updated the iOS sandbox table to Apple's current scenarios, and noted Apple deprecated significantAppCha…
AgeDeclarationSource gained confirmed, for ages Apple confirmed via payment card, government ID or similar (iOS 26.2+). These used to report source: null. 26.2-26.4 report each confirmation method separately; 26.5 folds them into confirmed, and so does the plugin.switch on AgeDeclarationSource needs a confirmed case, and source == null no longer means a confirmed adult on iOS. The 18+ example now checks for confirmed instead of excluding selfDeclared.significantAppChangeApprovalRequired in iOS 26.4. Dropped the "not yet live" note on the Play Console's revoked-approvals tab now that Google removed it.Full Changelog: 0.8.0...0.9.0
AgeSignalsStatus.declared is deprecated and no longer returned; read ageRangeSource == AgeRangeSource.tierA instead.
Migrates Android to Play age-signals 0.0.4, which removed the library's userStatus. Reading age signals is now two calls, and status is derived from the reported age band measured against your highest age gate rather than from the assurance tier.
Thanks to @syntaxticsugr, who did the 0.0.4 migration in #34 and reviewed the merged result in #35.
status now comes from the reported age band, not the assurance tier. Pass ageGates on Android too; it uses 18 until you do.AgeSignalsStatus.declared is deprecated and no longer returned; read ageRangeSource == AgeRangeSource.tierA instead.mostRecentApprovalDate to significantChangeApprovalDate, matching the upstream rename. The old name still works as a deprecated alias, and fromMap accepts the old key.useMockData: true now throws MockDataNotAllowedException outside debuggable builds.AgeSignalsStatus and AgeDeclarationSource gained values, so exhaustive switches need new cases.requestAgeSignalsAccess(), the first of the two calls. Returns shared, notShared or verificationRequired. On iOS it returns shared, since Apple gathers consent inside checkAgeSignals().AgeSignalsResult.ageRangeSource (tierA-tierD) and significantChangeStatus.See Migrating to 0.8.0 for the before and after, plus notes for 0.6.x and 0.5.x.
Full changelog: 0.7.0...0.8.0
com.google.android.play:age-signals 0.0.4, which removes userStatus in favour of ageRangeSource and significantChangeStatus.requestAgeSignalsAccess(), the first of 0.0.4's two calls. It may show Play's in-app sharing prompt (the plugin is now ActivityAware) and returns shared, notShared or verificationRequired. Call it before checkAgeSignals().requestAgeSignalsAccess() returns shared, since Apple gathers consent inside checkAgeSignals(), but it raises the version and initialization errors checkAgeSignals() used to raise. Widen your try to cover both calls.AgeSignalsResult now exposes ageRangeSource (tierA-tierD) and significantChangeStatus.status now comes from the reported age band measured against your highest age gate, not from the assurance tier. Pass ageGates on Android too; it uses 18 until you do.AgeSignalsStatus.declared is deprecated and no longer returned; read ageRangeSource == AgeRangeSource.tierA instead.mostRecentApprovalDate to significantChangeApprovalDate, matching the upstream rename. The old name still works as a deprecated alias, and fromMap accepts the old key.useMockData: true now throws MockDataNotAllowedException outside debuggable builds, so a release can't reach the fake manager.AgeSignalsMockData gained accessStatus plus explicit ageRangeSource / significantChangeStatus overrides.context7.json and llms.txt.iOS : Added getRequiredRegulatoryFeatures() (iOS 26.4+), which reports whether Apple requires the current user to share an age range and whether signi
getRequiredRegulatoryFeatures() (iOS 26.4+), which reports whether Apple requires the current user to share an age range and whether significant-change notification or parental consent applies (#31). Calls are guarded by a 10-second deadline. Throws UnsupportedPlatformException below iOS 26.4 (and in apps built with an SDK older than iOS 26.4) so an empty set always means Apple affirmatively reports nothing is required; on Android the set is always empty.showSignificantUpdateAcknowledgment(updateDescription:), the system sheet for significant app changes (iOS 26.4+). Throws UnsupportedPlatformException where unavailable instead of silently succeeding.AgeSignalsResult now includes activeParentalControls.AgeSignalsResult now includes mostRecentApprovalDate; mockable via AgeSignalsMockData.checkAgeSignals() now reports ApiNotAvailableException when Apple says age range sharing is unavailable for the user or region. Earlier versions misreported that state as MissingEntitlementException even on correctly entitled apps.PRESENTATION_CONTEXT_UNAVAILABLE errors now surface as ApiErrorException instead of the base AgeSignalsException.Runner.entitlements into signing via CODE_SIGN_ENTITLEMENTS (it was previously never applied) and adds buttons for the regulatory features API.Full Changelog: 0.6.2...0.7.0
Android : Fixed the Gradle build on hosts not using AGP 9 built-in Kotlin. The Kotlin plugin is now applied only when the host needs it (AGP <9, or an
android.builtInKotlin=false), so the plugin works with AGP 9 built-in Kotlin as well as AGP 8.x + KGP 2.0+. No changes required in consuming apps.android/.supervisedApprovalDenied (#24).Full Changelog: 0.6.1...0.6.2
iOS : Fixed SwiftPM build failure from 0.6.0 caused by a wrong argument order in Package.swift . CocoaPods was not affected.
Package.swift. CocoaPods was not affected.Full Changelog: 0.6.0...0.6.1
iOS : Fixed checkAgeSignals() hanging indefinitely on iOS 26.2+. The plugin no longer gates on Apple's isEligibleForAgeFeatures (which can hang, and r
checkAgeSignals() hanging indefinitely on iOS 26.2+. The plugin no longer gates on Apple's isEligibleForAgeFeatures (which can hang, and returns false before any prompt is accepted); it calls requestAgeRange() directly, per Apple's guidance.
AgeSignalsStatus.unknown from the eligibility pre-check. Region eligibility is now reflected by requestAgeRange() itself.minSdk from 21 to 23 (the com.google.android.play:age-signals AAR declares minSdkVersion 23; lower values fail the Gradle manifest merge).useMockData: true returning API_NOT_AVAILABLE when Play Services is unavailable; the mock path now runs independently of the real manager.ageLower=18, ageUpper=null).FlutterFramework dependency in Package.swift (required by Flutter 3.41+ SPM; removes the build warning).AgeSignalsResult nullability, and documented the iOS 1-3 age-gate limit.Full Changelog: 0.5.1...0.6.0
Android : Updated com.google.android.play:age-signals to version 0.0.3 ( #25 , thanks to @nathanael540 )
com.google.android.play:age-signals to version 0.0.3 (#25, thanks to @nathanael540)
DECLARED for users who have declared their age through Google PlayAgeSignalsException.errorCode instead of string matchingSDK_VERSION_OUTDATED error handlingFull Changelog: 0.5.0...0.5.1
Android : Added mockData parameter for customizable testing
Android: Added mockData parameter for customizable testing
AgeSignalsMockData class allows testing different scenariosFakeAgeSignalsManager from com.google.android.play.agesignals.testing packageDocumentation: Major updates and improvements
mockData is Android-only (iOS has no official testing utilities from Apple)iOS: No changes
useMockData and mockData parameters (same as 0.4.2)Full Changelog: 0.4.2...0.5.0
Android : Fixed ageLower and ageUpper to read actual values from Google Play Age Signals API
ageLower and ageUpper to read actual values from Google Play Age Signals API
null, now they correctly return age range values for supervised usersageLower=13, ageUpper=15 for a 13-15 age band)null for verified users (18+) as expectedFull Changelog: 0.4.1...0.4.2
Fixed code formatting issues to improve pub.dev score
Android : Added distinct status values for guardian approval states ( #10 , thanks to @kumamotone )
Android: Added distinct status values for guardian approval states (#10, thanks to @kumamotone)
AgeSignalsStatus.supervisedApprovalPending - awaiting guardian responseAgeSignalsStatus.supervisedApprovalDenied - guardian denied accessiOS: Added regional eligibility check for iOS 26.2+ (#9, thanks to @rokarnus)
AgeSignalsStatus.unknown for users outside applicable regionsError Handling: Added 6 new exception types with detailed diagnostics
MissingEntitlementException, ApiErrorException, NetworkErrorExceptionUserCancelledException, PlayServicesException, UserNotSignedInExceptiondetails field with platform-specific diagnostic informationFull Changelog: 0.3.0...0.4.0
IMPORTANT: Critical update to ensure compatibility with Google Play Age Signals API requirements (effective January 1, 2026)
IMPORTANT: Critical update to ensure compatibility with Google Play Age Signals API requirements (effective January 1, 2026)
Android: ⚠️ Google has updated their requirements again - the Play Age Signals API now requires version 0.0.2 or higher (previously 0.0.1 in v0.2.0). Beta versions and 0.0.1 will throw exceptions starting January 1, 2026. (thanks to @JenniO for reporting this in #7)
com.google.android.play:age-signals:0.0.2 (latest required version)Migration: No code changes required - just update your dependency version in pubspec.yaml
Android: ⚠️ CRITICAL UPDATE - Bumped Play Age Signals API library version to non-beta stable release com.google.android.play:age-signals:0.0.1 (thanks
Android: ⚠️ CRITICAL UPDATE - Bumped Play Age Signals API library version to non-beta stable release com.google.android.play:age-signals:0.0.1 (thanks to @rokarnus for reporting this in #5)
ACTION REQUIRED: Users must upgrade to version 0.2.0 or higher before January 1, 2026
iOS: Fixed compilation error: renamed range.source to range.ageRangeDeclaration to match Apple's DeclaredAgeRange API
range.source to range.ageRangeDeclaration to match Apple's DeclaredAgeRange API (#3)iOS: Added Swift Package Manager (SPM) support
Android: Add useMockData parameter for testing
useMockData parameter for testingrequestAgeRange method call syntaxSupport for Google Play Age Signals API on Android (API 21+)
Your coding agent can read these notes before it upgrades. Set up the MCP server →