dynamic_app_icon_flutter_plus
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.
2.2.1
38K downloads/mo
#1679 most downloaded on pub.dev
Rishyash/dynamic_app_icon_flutter
What this package is like to depend on
Last release 21 days 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
7 months old
9 releases · first in 2025
9 releases in the last 12 months
see the full history below
Release timeline
9 releases · Dec 2025 to Aug 2026
2026
Releases
latest 9-
2.2.103 Aug 2026Release notes
Open source →- 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 accidentally skipped disabling
MainActivityon manifests without a.defaultactivity-alias, so switching to an alternate icon enabled the new alias without disablingMainActivity— showing duplicate launcher icons (#7).IconSwapper.applyIcon()now always disables the previous default component (MainActivityitself, for legacy manifests) unless it is the target, restoring the pre-2.2.0 single-icon behavior.
- 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 accidentally skipped disabling
-
2.2.025 Jul 2026Release notes
Open source →- Android — fixed a critical non-atomic icon swap that could leave the app fully unlaunchable.
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 toonTaskRemoved/onDestroyviadeferUntilBackground— 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. - Android —
MainActivityis no longer disabled during an icon swap when a.defaultactivity-alias is declared. TogglingMainActivityitself (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 usingapplicationIdSuffix. Declare apackage.MainActivity.defaultactivity-alias to own the launcher entry (see the updated Android Setup instructions and the example app's manifest) andMainActivitywill never be toggled again. Manifests without a.defaultalias keep the old behavior (MainActivityis toggled) — this is a non-breaking, opt-in migration. - Android: Added a self-healing safety net — if an icon swap somehow leaves no launcher component enabled, the default component is automatically re-enabled rather than leaving the app bricked.
- Updated the example app's manifest to use the new
.defaultalias pattern, plus a debug-source-set manifest overlay (example/android/app/src/debug/AndroidManifest.xml) that restoresMainActivity's launcher intent-filter forflutter run/flutter attachcompatibility, since Flutter's tooling launchesMainActivitydirectly and doesn't resolve activity-aliases.
- Android — fixed a critical non-atomic icon swap that could leave the app fully unlaunchable.
-
2.1.027 Jun 2026Release notes
Open source →- Android: Added an opt-in deferred icon swap to avoid the "kick to home" some OEM launchers (MIUI, EMUI, OneUI, ColorOS) trigger when
setComponentEnabledSettingruns while the app is foregrounded.setAlternateIconNamegains adeferUntilBackgroundflag (defaults tofalse). Whenfalse, the icon swaps immediately as before — this release is a drop-in upgrade with no behavior change unless you opt in.- When
deferUntilBackground: true, the swap is queued and applied once the app is backgrounded. The change is performed by a smallDynamicAppIconServiceononTaskRemoved/onDestroy(swipe-to-close), and recovered on next launch if the process was killed before it could run. - New
applyPendingIcon()method — call it from your lifecycle handler onAppLifecycleState.pausedso 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.
- iOS: Behavior unchanged — icon swaps remain synchronous;
deferUntilBackgroundandapplyPendingIcon()are no-ops. - Updated the example app with a toggle to demonstrate both the immediate and deferred swap strategies.
- Android: Added an opt-in deferred icon swap to avoid the "kick to home" some OEM launchers (MIUI, EMUI, OneUI, ColorOS) trigger when
-
2.0.027 Jun 2026Release notes
Open source →- BREAKING: Migrated the Android plugin to Flutter's built-in Kotlin support and raised the minimum Flutter version to
3.44.0.- The plugin no longer applies the Kotlin Gradle Plugin (
kotlin-android), which would otherwise break builds on Android Gradle Plugin (AGP) 9.0+. See the migration guide. - Replaced the deprecated
kotlinOptionsblock with thekotlin { compilerOptions { jvmTarget } }DSL. - Bumped the Android toolchain to AGP
9.0.1, Kotlin2.3.20, and Java17.
- The plugin no longer applies the Kotlin Gradle Plugin (
- Updated the example app to built-in Kotlin and bumped Gradle (
9.1.0), AGP (9.0.1), and Kotlin (2.3.20) to clear Flutter 3.44 deprecation warnings.
- BREAKING: Migrated the Android plugin to Flutter's built-in Kotlin support and raised the minimum Flutter version to
-
1.0.127 Jun 2026Release notes
Open source →- Fixed Swift Package Manager (SPM) support that was not detected by Flutter in 1.0.0
- Moved
Package.swiftto the Flutter-requiredios/dynamic_app_icon_flutter_plus/path - Moved Swift sources and
PrivacyInfo.xcprivacyinto the SPMSources/layout (shared with CocoaPods) - Declared the
FlutterFrameworkSPM dependency required by Flutter 3.44+
- Moved
- CocoaPods support retained for full backwards compatibility
- Fixed Swift Package Manager (SPM) support that was not detected by Flutter in 1.0.0
-
1.0.026 May 2026Release notes
Open source →- Added Swift Package Manager (SPM) support for iOS — resolves Flutter SPM compatibility warning
- CocoaPods support retained for full backwards compatibility
-
0.0.831 Dec 2025 -
0.0.730 Dec 2025 -
0.0.630 Dec 2025