PackageTrack
Sign in Get early access

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
Release Pre-release

Releases

latest 9
  1. 2.2.1 03 Aug 2026
    Release notes
    • 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 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.
    Open source →
  2. 2.2.0 25 Jul 2026
    Release notes
    • 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 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.
    • Android — 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.
    • 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 .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.
    Open source →
  3. 2.1.0 27 Jun 2026
    Release notes
    • Android: Added an opt-in deferred icon swap to avoid the "kick to home" some OEM launchers (MIUI, EMUI, OneUI, ColorOS) trigger when 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.
      • When 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.
      • New 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.
    • iOS: Behavior unchanged — icon swaps remain synchronous; deferUntilBackground and applyPendingIcon() are no-ops.
    • Updated the example app with a toggle to demonstrate both the immediate and deferred swap strategies.
    Open source →
  4. 2.0.0 27 Jun 2026
    Release notes
    • 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 kotlinOptions block with the kotlin { compilerOptions { jvmTarget } } DSL.
      • Bumped the Android toolchain to AGP 9.0.1, Kotlin 2.3.20, and Java 17.
    • 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.
    Open source →
  5. 1.0.1 27 Jun 2026
    Release notes
    • Fixed Swift Package Manager (SPM) support that was not detected by Flutter in 1.0.0
      • Moved Package.swift to the Flutter-required ios/dynamic_app_icon_flutter_plus/ path
      • Moved Swift sources and PrivacyInfo.xcprivacy into the SPM Sources/ layout (shared with CocoaPods)
      • Declared the FlutterFramework SPM dependency required by Flutter 3.44+
    • CocoaPods support retained for full backwards compatibility
    Open source →
  6. 1.0.0 26 May 2026
    Release notes
    • Added Swift Package Manager (SPM) support for iOS — resolves Flutter SPM compatibility warning
    • CocoaPods support retained for full backwards compatibility
    Open source →
  7. 0.0.8 31 Dec 2025
    Release notes
    • Readme
    Open source →
  8. 0.0.7 30 Dec 2025
    Release notes
    • Package fix
    Open source →
  9. 0.0.6 30 Dec 2025
    Release notes
    • Initial Setup
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive