NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1701 most downloaded on pub.dev
Dynamic App Icon for Flutter enables Flutter apps to change their launcher icon at runtime, ideal for branding updates, seasonal themes, and feature-based icon switching.
Last release 2 months ago
03 Aug 2026
Release timing varies
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 9 of 9 stable releases
Nothing withdrawn
no release was ever pulled
9 months old
9 releases · first in 2025
One column per month.
Android — fixed a regression from 2.2.0 that left both the default and alternate launcher icons enabled simultaneously. The 2.2.0 atomic-swap rework a
MainActivity on manifests without a .default activity-alias, so switching to an alternate icon enabled the new alias without disabling MainActivity — showing duplicate launcher icons (#7). IconSwapper.applyIcon() now always disables the previous default component (MainActivity itself, for legacy manifests) unless it is the target, restoring the pre-2.2.0 single-icon behavior.Android — fixed a critical non-atomic icon swap that could leave the app fully unlaunchable. IconSwapper.applyIcon() previously disabled every launche
IconSwapper.applyIcon() previously disabled every launcher component before enabling the target one. If the process was killed mid-swap — most likely exactly when the swap is deferred to onTaskRemoved/onDestroy via deferUntilBackground — the app could end up with zero enabled, exported launcher components: no icon, unlaunchable except through system settings ("App info") followed by a reinstall. The swap now enables the target component first and disables the others after, so there is never a moment with no enabled launcher component, no matter when the process dies.MainActivity is no longer disabled during an icon swap when a .default activity-alias is declared. Toggling MainActivity itself (the previous behavior) could break deep links, App Links, and notification-tap handling while an alternate icon was active, and could crash on flavor builds using applicationIdSuffix. Declare a package.MainActivity.default activity-alias to own the launcher entry (see the updated Android Setup instructions and the example app's manifest) and MainActivity will never be toggled again. Manifests without a .default alias keep the old behavior (MainActivity is toggled) — this is a non-breaking, opt-in migration..default alias pattern, plus a debug-source-set manifest overlay (example/android/app/src/debug/AndroidManifest.xml) that restores MainActivity's launcher intent-filter for flutter run/flutter attach compatibility, since Flutter's tooling launches MainActivity directly and doesn't resolve activity-aliases.Android: Added an opt-in deferred icon swap to avoid the "kick to home" some OEM launchers (MIUI, EMUI, OneUI, ColorOS) trigger when setComponentEnabl
setComponentEnabledSetting runs while the app is foregrounded.
setAlternateIconName gains a deferUntilBackground flag (defaults to false). When false, the icon swaps immediately as before — this release is a drop-in upgrade with no behavior change unless you opt in.deferUntilBackground: true, the swap is queued and applied once the app is backgrounded. The change is performed by a small DynamicAppIconService on onTaskRemoved/onDestroy (swipe-to-close), and recovered on next launch if the process was killed before it could run.applyPendingIcon() method — call it from your lifecycle handler on AppLifecycleState.paused so a deferred swap applies the moment the user leaves the app (e.g. presses Home) instead of waiting for the task to be removed. No-op on iOS.deferUntilBackground and applyPendingIcon() are no-ops.Replaced the deprecated kotlinOptions block with the kotlin { compilerOptions { jvmTarget } } DSL.
3.44.0.
kotlin-android), which would otherwise break builds on Android Gradle Plugin (AGP) 9.0+. See the migration guide.kotlinOptions block with the kotlin { compilerOptions { jvmTarget } } DSL.9.0.1, Kotlin 2.3.20, and Java 17.9.1.0), AGP (9.0.1), and Kotlin (2.3.20) to clear Flutter 3.44 deprecation warnings.Fixed Swift Package Manager (SPM) support that was not detected by Flutter in 1.0.0
Package.swift to the Flutter-required ios/dynamic_app_icon_flutter_plus/ pathPrivacyInfo.xcprivacy into the SPM Sources/ layout (shared with CocoaPods)FlutterFramework SPM dependency required by Flutter 3.44+Added Swift Package Manager (SPM) support for iOS — resolves Flutter SPM compatibility warning
* Readme
* Package fix
* Initial Setup
Your coding agent can read these notes before it upgrades. Set up the MCP server →