dynamic_app_icon_flutter_plus 2.2.1 copy "dynamic_app_icon_flutter_plus: ^2.2.1" to clipboard
dynamic_app_icon_flutter_plus: ^2.2.1 copied to clipboard

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 #

  • 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.

2.2.0 #

  • 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.

2.1.0 #

  • 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.

2.0.0 #

  • 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.

1.0.1 #

  • 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

1.0.0 #

  • Added Swift Package Manager (SPM) support for iOS — resolves Flutter SPM compatibility warning
  • CocoaPods support retained for full backwards compatibility

0.0.8 #

  • Readme

0.0.7 #

  • Package fix

0.0.6 #

  • Initial Setup

0.0.5 #

  • Initial Setup

0.0.4 #

  • Initial Setup

0.0.3 #

  • Initial Setup

0.0.1 #

  • Initial release of dynamic_app_icon_flutter
  • Android Support: Dynamic icon changing using activity aliases
    • Automatic discovery of available icons from AndroidManifest.xml
    • Support for unlimited number of alternate icons
    • Flexible icon naming (no hardcoded names)
    • Uses main activity as default icon launcher
  • iOS Support: Dynamic icon changing using alternate app icons
    • Support for iOS 10.3+ alternate icons
    • Get available icons from Info.plist
    • Set alternate icons with optional alert suppression
  • Core Features:
    • supportsAlternateIcons - Check if platform supports dynamic icons
    • getAlternateIconName() - Get current active icon name
    • getAvailableIcons() - Get list of all available alternate icons
    • setAlternateIconName() - Set the app icon dynamically
  • Example App: Complete UI demonstration with Material Design 3
    • Platform support status indicator
    • Current icon display
    • Available icons list with selection
    • Clean, modern interface suitable for pub.dev
38
likes
160
points
32.3k
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

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.

Repository (GitHub)
View/report issues

Topics

#dynamic #icon #app

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on dynamic_app_icon_flutter_plus

Packages that implement dynamic_app_icon_flutter_plus