app_update_pilot
Complete app update lifecycle manager for Flutter. Store version checks, force update walls, A/B rollout, rich changelogs, skip with cooldown, analytics hooks, maintenance mode, and remote config from any JSON API.
1.0.6
65 downloads/mo
#3092 most downloaded on pub.dev
ramprasad090/app_update_pilot
What this package is like to depend on
Last release 4 months ago
23 Apr 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 7 of 7 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
7 releases · first in 2026
7 releases in the last 12 months
see the full history below
Release timeline
7 releases · Mar 2026 to Apr 2026Releases
latest 7-
1.0.623 Apr 2026Release notes
Open source →- Yield to event loop after checkForUpdate so pushReplacement /
pushAndRemoveUntil completes before dialog is shown on root navigator - UpdatePilotGuard defers _performCheck to addPostFrameCallback so
widget is fully settled in tree before showing any UI
Release notes
Open source →Bug Fixes
- Dialog disappears / new screen comes through — when
check()is called in a screen that also navigates away (e.g.pushReplacement,pushAndRemoveUntil), the dialog was dismissed by the in-flight navigation. Fixed by yielding to the event loop aftercheckForUpdatecompletes so any pending navigation settles before the dialog is pushed onto the root navigator. UpdatePilotGuardtiming — deferred_performCheck()toaddPostFrameCallbackso the widget is fully settled in the navigator tree before showing any UI.
- Yield to event loop after checkForUpdate so pushReplacement /
-
1.0.523 Apr 2026Release notes
Open source →Capture ModalRoute before the async checkForUpdate gap. If the calling
screen is no longer the active route when the check completes (user
navigated away during Play Store scrape), skip showing any UI.Fixes fromStore() dialog popping over next screen when called in main.
Co-Authored-By: Claude Sonnet 4.6 [email protected]
-
1.0.423 Apr 2026Release notes
Open source →- _openStore now checks bool return of launchUrl instead of catching
exceptions (launchUrl returns false on failure, never throws) - Iterates market:// then https://play.google.com fallback in both
ForceUpdateWall and UpdatePromptDialog - Fixes Update Now doing nothing when urgency:critical via fromUrl config
Co-Authored-By: Claude Sonnet 4.6 [email protected]
- _openStore now checks bool return of launchUrl instead of catching
-
1.0.223 Apr 2026Release notes
Open source →- Store URL changed from https://play.google.com to market:// so the
Play Store app opens directly instead of a browser - Falls back to https://play.google.com if Play Store is not installed
- Added block to AndroidManifest for market:// and
play.google.com — required for launchUrl to work on Android 11+
(package visibility restrictions silently blocked it before)
Co-Authored-By: Claude Sonnet 4.6 [email protected]
Release notes
Open source →Bug Fixes
- "Update Now" does nothing on Android — store URL now uses
market://scheme which opens the Play Store app directly instead of a browser. Falls back tohttps://play.google.com/...if Play Store is not installed. - Android 11+ intent visibility — added
<queries>block to the plugin'sAndroidManifest.xmldeclaringmarket://andhttps://play.google.comintent filters. Without this,launchUrlsilently fails on Android 11+ due to package visibility restrictions.
- Store URL changed from https://play.google.com to market:// so the
-
1.0.123 Apr 2026Release notes
Open source →- launchUrl called directly (drop canLaunchUrl gate that silently failed on
Android without https scheme declaration) - Store opens before dialog dismisses; pop guarded with context.mounted
- showForceUpdateWall/showMaintenanceWall/showUpdatePrompt use rootNavigator
so walls survive splash-to-main navigation while async check is in flight - clearStack param (default true) added to wall helpers
Co-Authored-By: Claude Sonnet 4.6 [email protected]
Release notes
Open source →Bug Fixes
- "Update Now" button — fixed silent failure when using
UpdateConfig.fromUrl(). The button now callslaunchUrldirectly (no longer gated behindcanLaunchUrl, which silently returns false on Android if thehttpsscheme isn't declared in<queries>). Store opens before the dialog dismisses. - Root navigator usage —
showForceUpdateWall,showMaintenanceWall, andshowUpdatePromptnow userootNavigator: true. This prevents the force/maintenance wall from being popped or dismissed when called from a splash screen that navigates away while the async update check is in flight. clearStackoption —showForceUpdateWallandshowMaintenanceWallaccept an optionalclearStackparameter (defaulttrue) for cases where clearing the route stack is not desired.
- launchUrl called directly (drop canLaunchUrl gate that silently failed on
-
1.0.028 Mar 2026Release notes
Open source →Stable release of
app_update_pilot.Breaking Changes
- Removed
UpdateConfig.firebase()— replaced withUpdateConfig.fromMap()which works with Firebase Remote Config, Supabase, or any key-value source without requiring a Firebase dependency. - Removed
UpdateConfig.isFirebase— replaced withisFromMap.
New Features
- Native Android in-app updates — flexible (background download) and immediate (full-screen) modes using Google Play In-App Updates API via platform channels.
UpdateConfig.fromMap()— create config from anyMap<String, dynamic>, perfect for Firebase Remote Config, Supabase, or custom backends.- Error resilience —
checkForUpdate()now catches all errors, firesonCheckFailedanalytics callback, and returns safe "up to date" status so the app never crashes. - iOS store URL auto-generation — iOS now auto-generates App Store URLs from the bundle ID, matching Android's behavior.
Improvements
- Full
///doc comments on all public API members for pub.dev documentation score. - Comprehensive README with comparison table, usage examples, and API reference.
- Example app with demos for every feature including native in-app updates.
- Removed
-
0.1.028 Mar 2026Release notes
Open source →Initial release of
app_update_pilot.Core Features
- Native Android in-app updates — flexible (background download) and immediate (full-screen) modes using Google Play In-App Updates API. No need to leave the app.
- Store version checking — automatic Play Store (HTML scraping) and App Store (iTunes Lookup API) detection.
- Remote config — fetch update rules from any JSON API endpoint with custom headers.
- Firebase Remote Config — ready-to-use
UpdateConfig.firebase()factory. - Force update wall — non-dismissible full-screen UI when current version is below minimum required.
- Maintenance mode wall — block app usage during server downtime with custom messaging.
- Version comparison — robust semantic version parsing and comparison (
1.2.3,v1.2.3,1.2).
Update Prompts
- Optional update prompt — Material 3 dialog with changelog, skip, and remind-later actions.
- Changelog bottom sheet — draggable sheet with markdown rendering via
flutter_markdown. - Update banner — non-intrusive notification bar with dismiss and update actions.
- UpdatePilotGuard — wrapper widget that auto-checks on app start and shows appropriate UI.
Advanced Features
- A/B rollout — show updates to a percentage of users with stable per-device hashing.
- Per-platform minimum version — separate Android/iOS force-update thresholds.
- Skip version with cooldown — persist user's skip choice with configurable re-prompt timer.
- Remind me later — re-prompt after configurable delay (default 24 hours).
- Staged urgency —
optional,recommended, andcriticallevels.
Customization
- Full UI override —
customBuilderon every widget to replace the entire screen. - Granular overrides —
icon,title,description, button text on all widgets. - Footer builder — inject custom widgets below action buttons (e.g. update size, support links).
- Custom themes — all widgets use
ColorSchemefor automatic dark mode support.
Analytics
UpdateAnalytics— structured callbacks:onPromptShown,onUpdateAccepted,onUpdateSkipped,onRemindLater,onForceUpdateShown,onMaintenanceShown,onCheckFailed.AppUpdatePilot.configure()— set analytics globally once at app start.- Automatic event firing from
AppUpdatePilot.check().
Public API
AppUpdatePilot.check()— one-line setup with auto UI.AppUpdatePilot.checkForUpdate()— headless check returningUpdateStatus.AppUpdatePilot.showForceUpdateWall()/showUpdatePrompt()/showMaintenanceWall()— manual UI display.AppUpdatePilot.showChangelog()— standalone changelog bottom sheet.AppUpdatePilot.openStore()— open platform store listing.AppUpdatePilot.skipVersion()/remindLater()/isVersionSkipped()— programmatic skip/remind control.AppUpdatePilot.isInRolloutGroup()— check rollout eligibility.AppUpdatePilot.checkNativeUpdate()/startNativeUpdate()/completeNativeUpdate()— native Android in-app update flow.AppUpdatePilot.clearPersistedState()— reset all skip/remind state.