app_update_pilot 1.0.6
app_update_pilot: ^1.0.6 copied to clipboard
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 [...]
1.0.6 #
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.
1.0.2 #
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.
1.0.1 #
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.
1.0.0 #
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.flutter-io.cn documentation score. - Comprehensive README with comparison table, usage examples, and API reference.
- Example app with demos for every feature including native in-app updates.
0.1.0 #
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.